加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite COUNT和LEFT JOIN – 如何结合?

发布时间:2020-12-12 18:58:42 所属栏目:百科 来源:网络整理
导读:有两个表:一个(P)包含产品列表,另一个(H)包含消耗的产品历史.每种产品可以消耗0次或更多次.我需要构建一个查询,它将返回P中的所有产品以及每个产品消耗的次数,并按消耗的时间排序.这是我做的: SELECT P.ID,P.Name,H.Date,COUNT(H.P_ID) as Count FROM P LE
有两个表:一个(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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读