如何显示列的百分比
How can I display the percentage of my columns
我想计算每个 typeItem 相对于所有 typeItem 在每个月的百分比,我该如何实现?
我有一个 table typeItem, AMOUNT, month in followwing
SELECT
SUM(CASE WHEN MONTH = 1 THEN AMOUNT END) "JAN"
SUM(CASE WHEN MONTH = 2 THEN AMOUNT END) "FEB"
...
FROM (SELECT AMOUNT, MONTH, ItemTYPE FROM MY TABLE)
GROUP BY typeItem
这给了我
OUTPUT:
ItemType JAN FEB ...
A 123 456
B 234 567
...
--但我想要:
SELECT
SUM(CASE WHEN MONTH = 1 THEN AMOUNT END) "JAN"
--CALCULATE PERCENTAGE FOR JAN (AMOUNT ItemType/AMOUNT ALL ItemType) "JAN %"
SUM(CASE WHEN MONTH = 2 THEN AMOUNT END) "FEB"
--CALCULATE PERCENTAGE FOR FEB(AMOUNT ItemType/AMOUNT ALL ItemType) "FEB %"
...
FROM (SELECT PRICE, MONTH, ItemTYPE FROM MY TABLE)
GROUP BY typeItem
OUTPUT:
ItemType JAN JAN% FEB FEB% ...
A 123 0.11 456 0.15
B 234 0.13 567 0.16
...
你可以除:
SELECT SUM(CASE WHEN MONTH = 1 THEN AMOUNT END) as "JAN",
SUM(CASE WHEN MONTH = 1 THEN AMOUNT END) / SUM(SUM(CASE WHEN MONTH = 1 THEN AMOUNT END)) OVER () as "JAN",
SUM(CASE WHEN MONTH = 2 THEN AMOUNT END) as "FEB",
SUM(CASE WHEN MONTH = 2 THEN AMOUNT END) / SUM(SUM(CASE WHEN MONTH = 2 THEN AMOUNT END)) OVER () as "FEB",
. . .
FROM T
WHERE MONTH IN (1, 2, . . . )
GROUP BY typeItem
您可以使用如下解析函数实现:
SELECT
SUM(CASE WHEN MONTH = 1 THEN AMOUNT END) AS JAN,
SUM(CASE WHEN MONTH = 1 THEN AMOUNT END) / MAX(CASE WHEN MONTH = 1 THEN SM END) AS "JAN%",
SUM(CASE WHEN MONTH = 2 THEN AMOUNT END) AS FEB,
SUM(CASE WHEN MONTH = 2 THEN AMOUNT END) / MAX(CASE WHEN MONTH = 2 THEN SM END) AS "FEB%"
...
FROM (SELECT AMOUNT, MONTH, ItemTYPE,
SUM(AMOUNT) OVER (PARTITION BY MONTH) AS SM
FROM MY TABLE)
GROUP BY typeItem
注意:当月金额之和为零时,需要处理除以零的情况。
干杯!!
我想计算每个 typeItem 相对于所有 typeItem 在每个月的百分比,我该如何实现?
我有一个 table typeItem, AMOUNT, month in followwing
SELECT
SUM(CASE WHEN MONTH = 1 THEN AMOUNT END) "JAN"
SUM(CASE WHEN MONTH = 2 THEN AMOUNT END) "FEB"
...
FROM (SELECT AMOUNT, MONTH, ItemTYPE FROM MY TABLE)
GROUP BY typeItem
这给了我
OUTPUT:
ItemType JAN FEB ...
A 123 456
B 234 567
...
--但我想要:
SELECT
SUM(CASE WHEN MONTH = 1 THEN AMOUNT END) "JAN"
--CALCULATE PERCENTAGE FOR JAN (AMOUNT ItemType/AMOUNT ALL ItemType) "JAN %"
SUM(CASE WHEN MONTH = 2 THEN AMOUNT END) "FEB"
--CALCULATE PERCENTAGE FOR FEB(AMOUNT ItemType/AMOUNT ALL ItemType) "FEB %"
...
FROM (SELECT PRICE, MONTH, ItemTYPE FROM MY TABLE)
GROUP BY typeItem
OUTPUT:
ItemType JAN JAN% FEB FEB% ...
A 123 0.11 456 0.15
B 234 0.13 567 0.16
...
你可以除:
SELECT SUM(CASE WHEN MONTH = 1 THEN AMOUNT END) as "JAN",
SUM(CASE WHEN MONTH = 1 THEN AMOUNT END) / SUM(SUM(CASE WHEN MONTH = 1 THEN AMOUNT END)) OVER () as "JAN",
SUM(CASE WHEN MONTH = 2 THEN AMOUNT END) as "FEB",
SUM(CASE WHEN MONTH = 2 THEN AMOUNT END) / SUM(SUM(CASE WHEN MONTH = 2 THEN AMOUNT END)) OVER () as "FEB",
. . .
FROM T
WHERE MONTH IN (1, 2, . . . )
GROUP BY typeItem
您可以使用如下解析函数实现:
SELECT
SUM(CASE WHEN MONTH = 1 THEN AMOUNT END) AS JAN,
SUM(CASE WHEN MONTH = 1 THEN AMOUNT END) / MAX(CASE WHEN MONTH = 1 THEN SM END) AS "JAN%",
SUM(CASE WHEN MONTH = 2 THEN AMOUNT END) AS FEB,
SUM(CASE WHEN MONTH = 2 THEN AMOUNT END) / MAX(CASE WHEN MONTH = 2 THEN SM END) AS "FEB%"
...
FROM (SELECT AMOUNT, MONTH, ItemTYPE,
SUM(AMOUNT) OVER (PARTITION BY MONTH) AS SM
FROM MY TABLE)
GROUP BY typeItem
注意:当月金额之和为零时,需要处理除以零的情况。
干杯!!