选择不同的列并获取另一列的计数

时间:2016-02-24 21:39:11

标签: sql postgresql

我有following sqlfiddle

CREATE TABLE tester(
  name TEXT,
  address TEXT
 )

表格中的每个人都可以拥有多个地址。我想选择所有名称和他们拥有的地址数量> 1个地址。我试过了:

SELECT d.name, count(address) c FROM (SELECT DISTINCT ON(name) FROM tester) d
  LEFT JOIN tester ON d.name = links.name
  WHERE count(address) > 1

我明白了:

ERROR: syntax error at or near "FROM" Position: 64

我也尝试过DISTINCT ON查询:

SELECT DISTINCT ON(name) name, count(address) FROM tester HAVING count(address) > 1

我明白了:

ERROR: column "tester.name" must appear in the GROUP BY clause or be used in an aggregate function Position: 26

我觉得我太难了。

2 个答案:

答案 0 :(得分:3)

只需使用GROUP BY

SELECT name, count(address)
FROM tester
GROUP BY name
HAVING count(address) > 1
SQL中的

GROUP BY(以及其他语言)将始终生成不同的组,因此在这种情况下不需要DISTINCT

答案 1 :(得分:0)

您只需正确使用群组即可。像这样:

SELECT name, count(*) 
FROM tester
group by name