在這樣的查詢:MySQL的計數「IN」語句匹配
SELECT ID FROM table
WHERE field
IN (SELECT field2 FROM table2 WHERE condition)
如何我可以在報表匹配的記錄數排序返回的行?
在這樣的查詢:MySQL的計數「IN」語句匹配
SELECT ID FROM table
WHERE field
IN (SELECT field2 FROM table2 WHERE condition)
如何我可以在報表匹配的記錄數排序返回的行?
我將假設你的意思是表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
中是唯一的。
嘗試JOIN-ING在哪裏這些領域都是平等的,然後做一個COUNT(),如跌破的話,你可以訂購由COUNT()(較場的出現次數=域2)
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
你需要說明你的意思。在IN()子查詢中匹配的記錄數是一個標量值,所以按它排序是沒有意義的。如果可能,發佈樣本記錄集和樣本預期輸出。 –