有两个表:一个(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
这似乎仅在历史表包含数据时有效,但如果不包含 – 结果不正确.我究竟做错了什么?
解决方法
您需要一个分组才能获得所需的计数.您还需要将一个聚合函数应用于H.Date,否则不清楚选择哪个日期:
SELECT P.ID,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