我如何基于另一列(类型为:weekly或yearly)获取行的计数/总和(COUNT()或SUM())?我有两个表:
- 店铺:
Id | Name | Type |
---|---|---|
1 | Store 1 | Weekly |
2 | Store 2 | Yearly |
3 | Store 3 | Weekly |
4 | Store 4 | Weekly |
- 订单:
编号 | 商店编号 | 订单日期 | 数量 |
---|---|---|---|
1 | 1 | 2022年1月31日 | 2 |
2 | 1 | 2022年12月31日 | 5* |
3 | 2 | 2022年1月28日 | 30* |
4 | 2 | 2022年6月30日 | 50* |
5 | 2 | 2022年12月31日 | 70* |
6 | 3 | 2022年6月15日 | 8 |
7 | 3 | 2022年12月27日 | 9* |
8 | 3 | 2022年12月31日 | 3* |
a) 如果我传递日期范围(按周计算,2022-12-26 ~ 2023-01-01),期望的结果应该如下:
Id | Name | 订单数量 | 总数量 |
---|---|---|---|
1 | 商店 1 | 1 | 5 |
2 | 商店 2 | 3 | 150(当商店类型为“年度”时按年份求和:30+50+70) |
3 | 商店 3 | 2 | 12(按所选周求和:9+3) |
4 | 商店 4 | 0 | 0 |
如果 Store type
是 Yearly
,则所有订单将根据 StoreId
、OrderDate
的&year
进行汇总;如果是Weekly
,则基于 StoreId 和选择的 OrderDate 进行汇总。
b) 我尝试在 SELECT 语句中使用 CASE
,但没有成功,以下是我的部分代码:
SELECT s.Id,
s.Name,
COUNT(o.Id) AS 'Count of orders',
sum(o.Qty) AS 'Total Qty'
FROM Stores AS s
LEFT JOIN Orders AS o
ON o.StoreId = s.id
AND (OrderDate >= '2022-12-26' AND OrderDate <= '2023-01-01')
GROUP BY s.Id, OrderDate
ORDER BY OrderDate DESC
count
函数,将再次使用相同的复杂查询来获取数量。 - blabla_bingo