在这样的查询中:
SELECT ID FROM table
WHERE field
IN (SELECT field2 FROM table2 WHERE condition)
如何按IN语句中匹配的记录数量对返回的行进行排序?
答案 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
)
这假设id
中table
是唯一的。
答案 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