#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;
Даст вам тот результат, который, я думаю, вы хотите.