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