Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择distinct列并获取另一列的计数_Sql_Postgresql - Fatal编程技术网

Sql 选择distinct列并获取另一列的计数

Sql 选择distinct列并获取另一列的计数,sql,postgresql,Sql,Postgresql,我有: 表中的每个人都可以有多个地址。我想选择所有的名字和地址数,他们有一个以上的地址。我试过: 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" Positio

我有:

表中的每个人都可以有多个地址。我想选择所有的名字和地址数,他们有一个以上的地址。我试过:

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
ERROR: column "tester.name" must appear in the GROUP BY clause or be used in an aggregate function Position: 26
我还尝试了一个独特的ON查询:

SELECT DISTINCT ON(name) name, count(address) FROM tester HAVING count(address) > 1
我得到:

ERROR: syntax error at or near "FROM" Position: 64
ERROR: column "tester.name" must appear in the GROUP BY clause or be used in an aggregate function Position: 26

我觉得这太难了

只需使用
分组方式

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

SQL中的分组依据(以及其他语言中的分组依据)将始终生成不同的组,因此在这种情况下不需要使用不同的分组依据。

只需使用
分组依据

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

SQL中的分组依据(以及其他语言中的分组依据)将始终生成不同的组,因此在这种情况下不需要使用不同的分组依据。

您只需要正确使用分组依据。像这样:

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

你只需要正确地使用group by。像这样:

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

在给出答案后,请不要改变问题的性质。改为问一个新问题。我已将对您原始问题的编辑回滚。您是对的。我要开一家新的。谢谢!在给出答案后,请不要改变问题的性质。改为问一个新问题。我已将对您原始问题的编辑回滚。您是对的。我要开一家新的。谢谢!