Postgres:使用group by获取多个列

时间:2018-01-10 13:42:16

标签: postgresql

表格

select * from hello;
 id | name 
----+------
  1 | abc
  2 | xyz
  3 | abc
  4 | dfg
  5 | abc
(5 rows)

查询

select name,count(*) from hello where name in ('abc', 'dfg') group by name;

 name | count 

------+-------

 dfg  |     1
 abc  |     3
(2 rows)

在上面的查询中,我试图获取名称在元组中的行的计数。但是,我想得到id以及名字的数量。有没有办法可以实现这个目标?感谢

2 个答案:

答案 0 :(得分:2)

如果要返回“id”值,则可以使用窗口函数:

select id, name, count(*) over(PARTITION BY name)
from hello 
where name in ('abc', 'dfg');

这将返回id值以及每个名称的行数。

答案 1 :(得分:1)

如果要查看每个名称的所有ID,则需要对它们进行汇总:

select name, count(*), array_agg(id) as ids
from hello 
where name in ('abc', 'dfg') 
group by name;

返回如下内容:

name | count | ids    
-----+-------+--------
abc  |     3 | {1,3,5}
dfg  |     1 | {4}