Database 按相似列名对查询结果进行分组
Database 按相似列名对查询结果进行分组,database,postgresql,Database,Postgresql,PostgreSQL 8.0.4版 我设法查询数据库以得到这个表,我们称它为A: 从本质上讲,这告诉我某项成就获得最多次数的前3个级别。如图所示,我通过row\u number()在acquisition\u id上对其进行了分区 我被难倒在如何查询这个问题上,这样我就得到了一个类似的表: 区别在于,第一个最大值对应于行编号=1,第二个最大值对应于行编号=2,第三个最大值对应于行编号=3 我用于获取第二个表的查询: SELECT achievement_id, level_id AS
PostgreSQL 8.0.4版
我设法查询数据库以得到这个表,我们称它为A
:
从本质上讲,这告诉我某项成就获得最多次数的前3个级别。如图所示,我通过row\u number()
在acquisition\u id
上对其进行了分区
我被难倒在如何查询这个问题上,这样我就得到了一个类似的表:
区别在于,第一个最大值
对应于行编号=1
,第二个最大值
对应于行编号=2
,第三个最大值
对应于行编号=3
我用于获取第二个表的查询:
SELECT
achievement_id,
level_id AS first_max,
level_id AS second_max,
level_id AS third_max
FROM A
WHERE row_number = 1 --Obviously this line is wrong but not sure how to approach
尝试:
尝试:
使用
使用
令人惊讶的是,我得到了一个错误
无效操作:语法错误在“(”
)处或附近。试图解决这个问题。复制粘贴原样,问题在总和(级别id)过滤器中(其中…
,因为如果我删除这三行,查询将起作用。此功能在Postgres 9.4中引入。始终从选择版本()显示您的PostgreSQL版本)-谢谢,我应该指定。您的解决方案比@Vao的更优雅,但我正在运行PostgreSQL 8.0.2,因此我将接受Vao的解决方案作为答案,并向您投票。感谢您的提示。令人惊讶的是,我收到了一个错误无效操作:语法错误在或接近“(”
。正在尝试解决此问题。复制粘贴原样,问题出在总和(级别id)筛选器中(其中…
),因为如果我删除这三行,查询将起作用。此功能在Postgres 9.4中引入。始终从选择版本()显示PostgreSQL版本-谢谢,我应该指定。您的解决方案比@Vao的更优雅,但我正在运行PostgreSQL 8.0.2,因此我将接受Vao的解决方案作为答案,并向上投票。谢谢您的提示。
select
achievement_id,
max(first_max),
max(second_max),
max(third_max)
from (
SELECT
achievement_id,
case when row_number = 1 then level_id end AS first_max,
case when row_number = 2 then level_id end AS second_max,
case when row_number = 3 then level_id end AS third_max
FROM A
) B
group by achievement_id
SELECT
achievement_id,
sum(level_id) FILTER (WHERE row_number = 1) AS first_max,
sum(level_id) FILTER (WHERE row_number = 2) AS second_max,
sum(level_id) FILTER (WHERE row_number = 3) AS third_max
FROM A
GROUP BY 1