7

有两个表:一个 (P) 包含产品列表,另一个 (H) 包含消费产品的历史记录。每种产品都可以食用 0 次或多次。我需要构建一个查询,该查询将返回 P 中的所有产品以及每种产品的消费次数,并按消费次数排序。这是我所做的:

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

这似乎仅在历史表包含数据时才有效,但如果不包含数据 - 结果不正确。我究竟做错了什么?

4

1 回答 1

15

您需要 agroup 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
于 2013-05-01T19:09:48.637 回答