2013-05-01 188 views
4

有兩個表:一個(P)包含產品列表,另一個包含產品消耗的歷史記錄(H)。每個產品可以消耗0次或更多次。我需要構建一個查詢,將返回來自P的所有產品以及每個產品已被使用的次數,並按消耗的次數排序。這是我做的:SQLite COUNT和LEFT JOIN - 如何結合?

SELECT P.ID, P.Name, H.Date, COUNT(H.P_ID) as Count 
FROM P 
LEFT JOIN H 
    ON P.ID=H.P_ID 
ORDER BY Count DESC 

這似乎只工作,如果歷史表包含數據,但如果它不 - 結果是不正確的。我究竟做錯了什麼?

回答

9

您需要一個group by來獲得您需要的計數。您還需要一個聚合函數適用於H.Date,否則是不明確的挑哪個日期:

SELECT P.ID, P.Name, COUNT(H.P_ID) as Count, MAX(H.Date) as LastDate 
FROM P 
LEFT JOIN H ON P.ID=H.P_ID 
GROUP BY P.ID, P.Name 
ORDER BY Count DESC 

我拿起MAX(H.Date)產生最後消費的日期;如果您需要與H不同的日期,請更改聚合功能。

我不確定sqlite是否允許您按別名排序;如果沒有,請更換

ORDER BY Count DESC 

ORDER BY COUNT(H.P_ID) DESC 
+0

看起來像由別名排序工作得很好,還有您的解決方案:)謝謝了很多的休息! – Asahi 2013-05-01 19:21:55