MYSQL 计数匹配多列

Posted

技术标签:

【中文标题】MYSQL 计数匹配多列【英文标题】:MYSQL counting matches across multiple columns 【发布时间】:2017-07-19 01:23:03 【问题描述】:

我有下表:

id  col1    col2    col3    col4 ....
1   x3      y2      v7      i7  
2   x8      u4      r1      o2
3   m7      w2      x3      l1
4   j5      y2      t2      a5
5   u7      y2      v7      a5
6   b7      y2      x3      a5

我想与 col2 完美匹配,并按定义的列数中的最高匹配数对结果进行排序

比如查询col1=u7,col2=y2,col3=v7,返回结果应该是

id  col1    col2    col3    col4 ....
5   u7      y2      v7      a5  (3 matches)
1   x3      y2      v7      i7  (2 matches)
4   j5      y2      t2      a5  (1 match)
6   b7      y2      x3      a5  (1 match)

到目前为止,我已经

SELECT * FROM table WHERE col2 = 'y2' ORDER BY...

我不知道在 ORDER BY 子句中应该放什么

【问题讨论】:

这种问题是设计不佳的症状 【参考方案1】:

您必须一一评估匹配项。我会为此使用if() 函数:

SELECT * FROM table WHERE col2 = 'y2'
ORDER BY if(col1='u7',1,0) + if(col3='v7',1,0) + ... desc

【讨论】:

以上是关于MYSQL 计数匹配多列的主要内容,如果未能解决你的问题,请参考以下文章

MySQL使用左连接将多列匹配为一[重复]

Mysql group_concat 的重复键和 1 个查询中多列的重复计数(查询优化)

选择 1 列可以匹配多列

excel统计每个数据出现次数 多行多列

对 SQL 中多列中的行计数求和的查询

SqlAlchemy:多列的不同计数