Использование GROUP BY в SQL-только с агрегатами?

is GROUP BY используется только с агрегатными функциями ? Может ли кто - нибудь привести пример, когда он используется не в сочетании с агрегатными функциями.

2 ответов


SELECT with GROUP BY можно использовать в качестве альтернативы для выбора DISTINCT. Пример Пранай раны по существу эквивалентен

SELECT DISTINCT UserName, Departmentid FROM user

если вы хотите пример, где предпочтение GROUP BY над DISTINCT оправдано, вот один. Скажем, вы хотите вернуть предметы, которые встречаются только один раз в таблице:

SELECT Item
FROM atable
GROUP BY Item
HAVING COUNT(*) = 1

как вы можете видеть, запрос возвращает только неагрегированный столбец.

он по-прежнему использует агрегатную функцию, хотя, даже если не в SELECT пункт. Там мая быть ситуациями, когда вы должны предпочесть GROUP BY различным, не нуждаясь в использовании агрегатных функций на всех, но на данный момент я должен быть специфичным для платформы.

в частности, если вы используете SQL Server, вы найдете разницу между результатами следующих двух операторов:

#1:

WITH data (f) AS (
  SELECT 'abc' UNION ALL
  SELECT 'def' UNION ALL
  SELECT 'abc'
)
SELECT f, ROW_NUMBER() OVER (ORDER BY f) FROM data GROUP BY f

#2:

WITH data (f) AS (
  SELECT 'abc' UNION ALL
  SELECT 'def' UNION ALL
  SELECT 'abc'
)
SELECT DISTINCT f, ROW_NUMBER() OVER (ORDER BY f) FROM data

(если вы не, вы все еще можете видеть результаты для себя используя Stack Exchange Data Explorer.)

Оба оператора предназначены для возврата различных ранжированных элементов. Однако только первый оператор (с GROUP BY) возвращает результаты, как ожидалось, в то время как последний (с DISTINCT) возвращает все предметы. очевидно, функции ранжирования в SQL Server оцениваются после GROUP BY, но перед DISTINCT причина в том, что предложение SELECT в SQL Server оценивается после GROUP BY, но перед DISTINCT, что делает вас предпочтительным GROUP BY над DISTINCT в этом случае. (Спасибо @ypercube за подталкивание меня в нужном направлении.)


что-то вроде этого, где не применяются агрегатные функции

Select City,State from geodata group by City,State