在postgresql中对数据进行分组

时间:2014-10-09 09:18:42

标签: postgresql

如果我有一个包含多个具有相同名称的条目的表,我想仅对名称进行分组,即显示表中存在的行数,但名称应仅出现一次,其他数据应显示在多个列中。即,对于其他行,名称应为空白:

table                                    expected result
----------------                         ------------------
col1  col2                                col1     col2
a       5                                  a         5
a       6                                            6
a       8                                            8
b       3                                  b         3
b       4                                            4

我正在使用PostgreSQL 9.2。

2 个答案:

答案 0 :(得分:0)

您可以使用row_number来确定每个组的第一次出现,并且从那里开始,距离不显示它只有case

SELECT CASE rn WHEN 1 THEN col1 ELSE NULL END, col2
FROM   (SELECT   col1, 
                 col2, 
                 ROW_NUMBER() OVER (PARTITION BY col1 
                                    ORDER BY     col2 ASC) AS rn
        FROM     my_table
        ORDER BY col1, col2) t

答案 1 :(得分:0)

首先,我需要说我没有PostgreSQL的经验,只有一些基本的SQL知识。改变原始表格本身的数据是不对的,你想要的是一些观察'的数据。通常这样的事情是在数据集返回给客户端之后做出的,实际上它是如何显示数据(表示事项),它不应该在SQL查询中而是在客户端。但是,如果你想用这样的东西打扰服务器,那么我会做以下:创建表的副本(它可以是临时表),然后在col1中清除值,这不是后续选择排序记录中的第一个通过col2。顺便说一句,您的表没有主键,因此您将无法实现该目标,因为您无法在后续选择中识别父记录。 因此,在客户端(通过数据光标)存档所需的想法,只需逐个遍历记录,就可以获得更多的分数。