2014-01-26 62 views
0

在這樣的查詢:MySQL的計數「IN」語句匹配

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

如何我可以在報表匹配的記錄數排序返回的行?

+0

你需要說明你的意思。在IN()子查詢中匹配的記錄數是一個標量值,所以按它排序是沒有意義的。如果可能,發佈樣本記錄集和樣本預期輸出。 –

回答

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中是唯一的。

0

嘗試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