如果我有一个包含多个具有相同名称的条目的表,我想仅对名称进行分组,即显示表中存在的行数,但名称应仅出现一次,其他数据应显示在多个列中。即,对于其他行,名称应为空白:
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。
答案 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。顺便说一句,您的表没有主键,因此您将无法实现该目标,因为您无法在后续选择中识别父记录。 因此,在客户端(通过数据光标)存档所需的想法,只需逐个遍历记录,就可以获得更多的分数。