获取按值分组的 Sum 和 Percent WHERE 数据的查询
Get query with Sum and Percent WHERE data grouped by value
这是我的 table:
Type
Creature
Population
HP Universe
Witches/Wizards
100,000
HP Universe
Muggles
250,000
HP Universe
Others
75,000
Other Universe
Witches/Wizards
500,000
Other Universe
Muggles
1,000,000
Other Universe
Others
175
我用这个查询得到了我的 table:
SELECT
CASE WHEN type LIKE '%hp%' THEN 'HP Universe'
ELSE 'Other Universe'
END AS Type,
CASE WHEN creature LIKE '%witches%' THEN 'Witches/Wizards'
WHEN creature LIKE '%muggle%' THEN 'Muggles'
ELSE 'Others'
END AS Creature,
COUNT(DISTINCT type_id) AS Population
FROM `table`
WHERE date BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH) AND CURRENT_DATE()
GROUP BY 1, 2
ORDER BY 1 DESC
我想添加另一个名为 pct_population
的列,总计 population
type
,然后给我百分比 creature
。
基本上,我希望我的 table 看起来像这样:
Type
Creature
Population
Pct_Population
HP Universe
Witches/Wizards
100,000
23.5%
HP Universe
Muggles
250,000
58.82%
HP Universe
Others
75,000
17.68%
Other Universe
Witches/Wizards
500,000
33.32%
Other Universe
Muggles
1,000,000
66.65%
Other Universe
Others
175
0.01%
我们基本上是将每个 type
的 population
相加,然后按 creature
.
细分百分比
我不确定如何将其添加到我的查询中。
您可以受益于 window function
:
SELECT
CASE WHEN type LIKE '%hp%' THEN 'HP Universe'
ELSE 'Other Universe'
END AS Type
, CASE WHEN creature LIKE '%witches%' THEN 'Witches/Wizards'
WHEN creature LIKE '%muggle%' THEN 'Muggles'
ELSE 'Others'
END AS Creature
, COUNT(DISTINCT type_id) AS Population
, COUNT(DISTINCT type_id) / count(*) over (partition by CASE WHEN creature LIKE '%witches%' THEN 'Witches/Wizards' WHEN creature LIKE '%muggle%' THEN 'Muggles' ELSE 'Others' END AS Creature)* 100.0 AS Pct_Population
FROM `table`
WHERE date BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH) AND CURRENT_DATE()
GROUP BY 1, 2
ORDER BY 1 DESC
这是我的 table:
Type | Creature | Population |
---|---|---|
HP Universe | Witches/Wizards | 100,000 |
HP Universe | Muggles | 250,000 |
HP Universe | Others | 75,000 |
Other Universe | Witches/Wizards | 500,000 |
Other Universe | Muggles | 1,000,000 |
Other Universe | Others | 175 |
我用这个查询得到了我的 table:
SELECT
CASE WHEN type LIKE '%hp%' THEN 'HP Universe'
ELSE 'Other Universe'
END AS Type,
CASE WHEN creature LIKE '%witches%' THEN 'Witches/Wizards'
WHEN creature LIKE '%muggle%' THEN 'Muggles'
ELSE 'Others'
END AS Creature,
COUNT(DISTINCT type_id) AS Population
FROM `table`
WHERE date BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH) AND CURRENT_DATE()
GROUP BY 1, 2
ORDER BY 1 DESC
我想添加另一个名为 pct_population
的列,总计 population
type
,然后给我百分比 creature
。
基本上,我希望我的 table 看起来像这样:
Type | Creature | Population | Pct_Population |
---|---|---|---|
HP Universe | Witches/Wizards | 100,000 | 23.5% |
HP Universe | Muggles | 250,000 | 58.82% |
HP Universe | Others | 75,000 | 17.68% |
Other Universe | Witches/Wizards | 500,000 | 33.32% |
Other Universe | Muggles | 1,000,000 | 66.65% |
Other Universe | Others | 175 | 0.01% |
我们基本上是将每个 type
的 population
相加,然后按 creature
.
我不确定如何将其添加到我的查询中。
您可以受益于 window function
:
SELECT
CASE WHEN type LIKE '%hp%' THEN 'HP Universe'
ELSE 'Other Universe'
END AS Type
, CASE WHEN creature LIKE '%witches%' THEN 'Witches/Wizards'
WHEN creature LIKE '%muggle%' THEN 'Muggles'
ELSE 'Others'
END AS Creature
, COUNT(DISTINCT type_id) AS Population
, COUNT(DISTINCT type_id) / count(*) over (partition by CASE WHEN creature LIKE '%witches%' THEN 'Witches/Wizards' WHEN creature LIKE '%muggle%' THEN 'Muggles' ELSE 'Others' END AS Creature)* 100.0 AS Pct_Population
FROM `table`
WHERE date BETWEEN DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTH) AND CURRENT_DATE()
GROUP BY 1, 2
ORDER BY 1 DESC