将 GROUP BY 与 SELECT CASE WHEN 语句一起使用
Use GROUP BY with SELECT CASE WHEN statement
我有一个 table 喜欢:
ORDER_DATE | ORDER_ID | ORDER_AMOUNT
2020-11-07 | 1 | 40
2020-11-07 | 1 | 60
2021-04-01 | 2 | 100
从 2020-07-01 到 2020-12-31,由于 Covid,销售税从 19% 降低到 16%。
现在我需要知道每个 ORDER_ID 的总金额。结果应该是:
ORDER_ID | ORDER_AMOUNT
1 | 116
2 | 119
到目前为止我的代码:
SELECT CASE WHEN ORDER_DATE BETWEEN '2020-07-01' AND '2020-12-31'
THEN SUM(ORDER_AMOUNT) * 1.16
WHEN (ORDER_DATE < '2020-07-01' OR ORDER_DATE > '2020-12-31')
THEN SUM(ORDER_AMOUNT) * 1.19
ELSE 0
END AS 'gross_amount'
--
FROM my_dwh_table
--
GROUP BY
CASE WHEN ORDER_DATE BETWEEN '2020-07-01' AND '2020-12-31'
THEN SUM(ORDER_AMOUNT) * 1.16
WHEN (ORDER_DATE < '2020-07-01' OR ORDER_DATE > '2020-12-31')
THEN SUM(ORDER_AMOUNT) * 1.19
ELSE 0
END
;
但我在 DBeaver 中收到此错误:
SQL Error [42000]: set function in group by clause
如何在 ORDER_ID 上使用 CASE WHEN 语句与 GROUP BY 计算不同的销售税?我的代码哪里出错了?
我想你想用 CASE
作为 SUM()
的参数来表达这个:
SELECT ORDER_ID,
SUM(CASE WHEN ORDER_DATE BETWEEN '2020-07-01' AND '2020-12-31'
THEN ORDER_AMOUNT * 1.16
ELSE ORDER_AMOUNT * 1.19
END) AS gross_amount
FROM my_dwh_table
GROUP BY ORDER_ID;
不需要ORDER BY
。
注意:这假设 ORDER_DATE
永远不会 NULL
(因此不需要 ELSE 0
并且 '2020-07-01'
是您系统上的有效日期。我会通常使用 DATE '2020-07-01'
作为日期常量。
我有一个 table 喜欢:
ORDER_DATE | ORDER_ID | ORDER_AMOUNT
2020-11-07 | 1 | 40
2020-11-07 | 1 | 60
2021-04-01 | 2 | 100
从 2020-07-01 到 2020-12-31,由于 Covid,销售税从 19% 降低到 16%。
现在我需要知道每个 ORDER_ID 的总金额。结果应该是:
ORDER_ID | ORDER_AMOUNT
1 | 116
2 | 119
到目前为止我的代码:
SELECT CASE WHEN ORDER_DATE BETWEEN '2020-07-01' AND '2020-12-31'
THEN SUM(ORDER_AMOUNT) * 1.16
WHEN (ORDER_DATE < '2020-07-01' OR ORDER_DATE > '2020-12-31')
THEN SUM(ORDER_AMOUNT) * 1.19
ELSE 0
END AS 'gross_amount'
--
FROM my_dwh_table
--
GROUP BY
CASE WHEN ORDER_DATE BETWEEN '2020-07-01' AND '2020-12-31'
THEN SUM(ORDER_AMOUNT) * 1.16
WHEN (ORDER_DATE < '2020-07-01' OR ORDER_DATE > '2020-12-31')
THEN SUM(ORDER_AMOUNT) * 1.19
ELSE 0
END
;
但我在 DBeaver 中收到此错误:
SQL Error [42000]: set function in group by clause
如何在 ORDER_ID 上使用 CASE WHEN 语句与 GROUP BY 计算不同的销售税?我的代码哪里出错了?
我想你想用 CASE
作为 SUM()
的参数来表达这个:
SELECT ORDER_ID,
SUM(CASE WHEN ORDER_DATE BETWEEN '2020-07-01' AND '2020-12-31'
THEN ORDER_AMOUNT * 1.16
ELSE ORDER_AMOUNT * 1.19
END) AS gross_amount
FROM my_dwh_table
GROUP BY ORDER_ID;
不需要ORDER BY
。
注意:这假设 ORDER_DATE
永远不会 NULL
(因此不需要 ELSE 0
并且 '2020-07-01'
是您系统上的有效日期。我会通常使用 DATE '2020-07-01'
作为日期常量。