如何使用SQL按另一列中的值聚合一列中的数据

如何使用SQL按另一列中的值聚合一列中的数据,sql,postgresql,Sql,Postgresql,我在PostgreSQL中有一个表,其中包含我国每个省份的人口统计数据 Columns are: Province_name, professions, Number_of_people. 正如你所看到的,每个职业的省名都是重复的。 那么,我如何才能不重复省份名称,而是在单独的列中获取专业名称呢?您想要做的是在Postgresql中比在其他rdbms中更复杂一点的透视。您可以使用交叉表功能。请在此处查找介绍: 对你来说,它看起来像这样: SELECT * FROM crosstab( 'se

我在PostgreSQL中有一个表,其中包含我国每个省份的人口统计数据

Columns are: Province_name, professions, Number_of_people.
正如你所看到的,每个职业的省名都是重复的。
那么,我如何才能不重复省份名称,而是在单独的列中获取专业名称呢?

您想要做的是在Postgresql中比在其他rdbms中更复杂一点的透视。您可以使用交叉表功能。请在此处查找介绍:

对你来说,它看起来像这样:

SELECT * 
FROM crosstab( 'select Province_name, professions, Number_of_people from table1 order by 1,2') 
     AS final_result(Province_name TEXT, data_scientist NUMERIC,data_engineer NUMERIC,data_architect NUMERIC,student NUMERIC);

听起来好像你想改变你的表(真的:最好在你的问题中显示数据和预期的输出!)


这是使用
FILTER
子句实现这一点的PostgreSQL方法(从9.4开始)

SELECT
    province,
    SUM(people) FILTER (WHERE profession = 'teacher') AS teacher,
    SUM(people) FILTER (WHERE profession = 'banker') AS banker,
    SUM(people) FILTER (WHERE profession = 'supervillian') AS supervillian
FROM mytable
GROUP BY province
SELECT
    province,
    SUM(CASE WHEN profession = 'teacher' THEN people ELSE 0 END) AS teacher,
    SUM(CASE WHEN profession = 'banker' THEN people ELSE 0 END) AS banker,
    SUM(CASE WHEN profession = 'supervillian' THEN people ELSE 0 END) AS supervillian
FROM mytable
GROUP BY province
如果您想采用更常见的方法,可以使用
CASE
子句

SELECT
    province,
    SUM(people) FILTER (WHERE profession = 'teacher') AS teacher,
    SUM(people) FILTER (WHERE profession = 'banker') AS banker,
    SUM(people) FILTER (WHERE profession = 'supervillian') AS supervillian
FROM mytable
GROUP BY province
SELECT
    province,
    SUM(CASE WHEN profession = 'teacher' THEN people ELSE 0 END) AS teacher,
    SUM(CASE WHEN profession = 'banker' THEN people ELSE 0 END) AS banker,
    SUM(CASE WHEN profession = 'supervillian' THEN people ELSE 0 END) AS supervillian
FROM mytable
GROUP BY province

请以表格形式提供您的示例数据和预期输出(通过单击下面的链接)并根据该数据添加一些示例数据和预期输出。请(您的问题-请勿在评论中发布代码或其他信息)Sry,我们没有看到任何内容。请添加示例数据和预期输出!这正是我想要的。我最终在Excel中将数据导出为CSV和do pivot表。谢谢你的关注!