有两个表:一个(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
Run Code Online (Sandbox Code Playgroud)
这似乎仅在历史表包含数据时有效,但如果不包含 - 结果不正确.我究竟做错了什么?
das*_*ght 11
你需要一个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
Run Code Online (Sandbox Code Playgroud)
我选择MAX(H.Date)生产上次消费的日期; 如果您需要不同的日期H,请更改聚合函数.
我不确定sqlite是否允许您按别名排序; 如果没有,请更换
ORDER BY Count DESC
Run Code Online (Sandbox Code Playgroud)
同
ORDER BY COUNT(H.P_ID) DESC
Run Code Online (Sandbox Code Playgroud)