2016-02-24 2 views
0

У меня есть 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 по запросу:

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 

Я чувствую как я делаю это слишком сложно.

+0

Подумайте: 'GROUP BY'. –

+1

Пожалуйста, не изменяйте характер вопроса после того, как были даны ответы. Вместо этого задайте новый вопрос. Я вернул изменения в ваш первоначальный вопрос. –

+0

Вы правы. Я открою новый. спасибо! –

ответ

3

Просто используйте GROUP BY:

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

GROUP BY в SQL (а также на других языках) всегда будет производить различные группы, так что нет никакой необходимости в DISTINCT в этом случае.

+0

Ваш исправленный [slqfiddle] (http://sqlfiddle.com/#!15/4c712/11/0) – drakyoko

0

Вам просто нужно использовать группу правильно. Например:

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