在 PostgreSQL 中,我有一个表 country
和一个表 property
。一个国家可以拥有很多属性(property)。每个属性都有一个 created_at
。我需要按年和周计算每个国家/地区的属性。举个例子,我有一个国家的查询。
SELECT
EXTRACT(YEAR FROM created_at) AS yy,
EXTRACT(WEEK FROM created_at) AS week,
COUNT(id) AS country_1
FROM property
WHERE id_country = 1
GROUP BY week, yy
ORDER BY yy, week ASC
结果是这样的
yy |week|country_1
---------------
2014|1 |5
2014|2 |1154
2014|3 |769
...
所以,我需要这样的结果
yy |week|country_1|country_2|country_3
----------------------------------------
2014|1 |5 |56 |543
2014|2 |1154 |1234 |432
2014|3 |769 |123 |432
...
这可能吗?查询会怎样?
最佳答案
没有任何扩展的替代解决方案:
SELECT
EXTRACT(YEAR FROM created_at) AS yy,
EXTRACT(WEEK FROM created_at) AS week,
COUNT(CASE WHEN id_country = 1 THEN id ELSE null END) AS country_1,
COUNT(CASE WHEN id_country = 2 THEN id ELSE null END) AS country_2,
COUNT(CASE WHEN id_country = 3 THEN id ELSE null END) AS country_3,
...
COUNT(CASE WHEN id_country = 7 THEN id ELSE null END) AS country_7,
FROM property
GROUP BY week, yy
ORDER BY yy, week ASC;
如果您使用的是 pg 9.4 或更高版本,您可以更换
COUNT(CASE WHEN id_country = 2 THEN id ELSE null END) AS country_2
与
COUNT(id) FILTER (WHERE id_country = 2) AS country_2
等等。
关于postgresql - 使用两列作为行数据来透视 PostgreSQL 中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31943068/