количество(1) и различное поведение в postgres

#postgresql

Вопрос:

Представьте себе стол:

 name age John 20 Sam 60 Dave 30 John 15  

Я хочу проверить количество различных имен, я запрашиваю таблицу следующим образом:

 SELECT COUNT(1), DISTINCT(name) FROM table GROUP BY 2  

Но я понимаю:

ОШИБКА: синтаксическая ошибка в положении «РАЗЛИЧНО» или рядом с ним: 18

Но когда я использую:

 SELECT DISTINCT(name), COUNT(1) FROM table GROUP BY 1  

Я действительно получаю то, чего от меня ожидают:

 John 2 Sam 1 Dave 1  

Есть ли причина, по которой первый запрос не работает, или я где-то ошибаюсь?

Комментарии:

1. distinct это не функция. Это всегда применимо ко всем столбцам в списке выбора. Заключение одного из столбцов в круглые скобки ничего не изменит и бесполезно. distinct (a),b это то же самое, что distinct a,(b) или distinct a,b , и оно всегда должно следовать за ключевым словом SELECT. Но в сочетании с group by этим совершенно необязательно начинать с самого начала. Кстати: count(1) на самом деле это немного медленнее в Postgres, чем count(*)

2. Спасибо, понял!

Ответ №1:

Различие здесь не требуется. ГРУППИРОВАТЬ посредством «группировать по определенному набору значений», так что

 SELECT COUNT(*), name FROM table GROUP BY name;  

Даст вам тот результат, который, я думаю, вы хотите.