SQLite COUNT和LEFT JOIN – 如何结合?

前端之家收集整理的这篇文章主要介绍了SQLite COUNT和LEFT JOIN – 如何结合?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有两个表:一个(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

猜你在找的Sqlite相关文章