MySQL计数" IN"声明匹配

时间:2014-01-26 23:42:23

标签: mysql

在这样的查询中:

SELECT ID FROM table 
WHERE field 
IN (SELECT field2 FROM table2 WHERE condition)

如何按IN语句中匹配的记录数量对返回的行进行排序?

2 个答案:

答案 0 :(得分:1)

我假设你的意思是表2中不同值的匹配数。

select t.ID, count(t2.field2) 
from table t left outer join
     (select distinct field2
      from table2
      where condition
     ) t2
     on t.field = t2.field2
group by t.id
order by count(t2.field2) desc;

为什么它的结构如此? left outer join确保table中的所有行都在结果集中。 distinct确保table2中的重复行不会导致输出中出现重复的行。 count(t2.field2)计算第二个表中的匹配数,因此当没有匹配时它将是0(与count(*)相反,在这种情况下为1

这假设idtable是唯一的。

答案 1 :(得分:0)

尝试在那些字段相等的情况下加入ON,然后执行COUNT(),如下所示,然后你可以ORDER BY那个COUNT()(表示出现field = field2)

SELECT table.ID,COUNT(*) as occurrence 
FROM table INNER JOIN table2
ON table.field = table2.field2
WHERE condition
GROUP BY table.ID
ORDER BY occurrence