gpt4 book ai didi

sql - SQL:使用子查询对数据进行分组

转载 作者:行者123 更新时间:2023-12-03 19:31:26 24 4
gpt4 key购买 nike

希望有人可以帮助我进行此查询。

如果我有一个样本表:

orderId | itemId | quantity | created
123456 | 1 | 100 | 1478822402
123457 | 1 | 5 | 1478736001
123458 | 2 | 10 | 1478736001
123459 | 2 | 40 | 1478822402


我正在尝试获取一个结果集,该结果集为我提供了今天和昨天售出的商品总数量-按商品分组。例如:

item    | numSoldToday   | numSoldYesterday
1 | 100 | 5
2 | 40 | 10


忽略出于测试目的的硬编码时间戳,我可以使用以下方法仅对今天出售的商品执行此操作:

SELECT item, sum(quantity) as numSoldToday FROM orders
WHERE created >= 1478822400 AND created <= 1478908799
GROUP by item


我可以使用子查询仅针对今天售出的商品和昨天售出的商品进行此操作:

SELECT sum(quantity) as numSoldToday, 
(SELECT (sum(quantity) FROM orders WHERE created >= 1478736000 AND created <= 1478822399 AND item = 1) as numSoldYesterday
FROM orders
WHERE created >= 1478822400 AND created <= 1478908799 AND item = 1


但是我似乎无法弄清楚如何将两者结合在一起-每个项目的分组结果集与今天和昨天售出的数量不使用客户端编程语言来获得项目列表并遍历每个项目效率低下。

我尝试将GROUP BY放在子查询中,但这给了我一个错误,我想不出纯粹用SQL进行此操作的最佳方法。

任何想法欢迎!
谢谢 :-)

最佳答案

您可以在汇总的case语句中而不是子查询中执行此操作,例如:

SELECT
o.item
,SUM(CASE WHEN o.created >= 1478822400 AND o.created <= 1478908799 THEN quantity ELSE 0 END) numSoldToday
,SUM(CASE WHEN o.created >= 1478736000 AND o.created <= 1478822399 THEN quantity ELSE 0 END) numSoldYesterday
FROM orders o
GROUP BY o.item

关于sql - SQL:使用子查询对数据进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40550869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com