Sql group by where: SQL GROUP BY Statement
Содержание
sql — Можем ли мы использовать группу и где условие с тем же именем поля
спросил
Изменено
3 года назад
Просмотрено
142к раз
У меня есть требование, например, вытащить все записи в диапазоне дат, выбранном пользователем, выбрать всех сотрудников, которые начали работу с 15 января 2011 г. по 20 августа 2011 г., и сгруппировать по дате.
Как написать SQL-запрос для этого:
SELECT * ОТ сотрудников ГДЕ дата начала >= '15 января 2011' И дата начала <= '20 августа 2011' СГРУППИРОВАТЬ ПО дате начала
- sql
- sql-сервер
- tsql
- sql-сервер-2008
1
Абсолютно. Это приведет к фильтрации записей в вашем диапазоне дат, а затем к группировке по каждому дню, по которому есть данные.
Следует отметить, что вы сможете выбрать только начальную дату, а затем вычисляемые агрегаты. В противном случае он должен работать отлично.
Например, этот запрос даст вам количество сотрудников для каждой даты начала:
SELECT startdate, count(*) ОТ сотрудников ГДЕ дата начала >= '15 января 2011' И дата начала <= '20 августа 2011' СГРУППИРОВАТЬ ПО дате начала
Можно, но предложение "GROUP BY" используется для группировки наборов строк, поэтому оно не имеет смысла для вашего вопроса (или чего-либо, что включает "SELECT *").
Чтобы ответить на ваш вопрос:
SELECT DATEADD(dd, 0, DATEDIFF(dd,0,StartDate)) AS 'StartDate', <другие поля> ОТ сотрудников ГДЕ StartDate МЕЖДУ «15 января 2011 г.» И «20 января 2011 г.» ЗАКАЗАТЬ ПО Дате начала
Примечание: зачистка времени от даты пришла отсюда
Зарегистрируйтесь или войдите
Зарегистрироваться через Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя электронную почту и пароль
Опубликовать как гость
Электронная почта
Обязательно, но не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.
Как взаимодействуют предложения наличия, группировки и места
Как взаимодействуют предложения наличия, группировки и места
Когда вы включаете с , группой
на и , где предложения в запросе, последовательность
в котором каждое предложение влияет на строки, определяет окончательные результаты:
Предложение where исключает строки
которые не соответствуют его условиям поиска.Группа по пункту собирает
остальные строки в одну группу для каждого уникального значения в группе
выражением .Агрегатные функции, указанные в списке выбора
рассчитать суммарные значения для каждой группы.с предложением исключает строки
из окончательных результатов, которые не соответствуют его условиям поиска.
следующий запрос иллюстрирует использование , где , группа
на и , имеющих предложения в одном операторе select
содержащие агрегаты:
выберите stor_id, title_id, сумма (кол-во) от продажидеталь где title_id как "PS%" сгруппировать по stor_id, title_id сумма (кол-во) > 200
stor_id title_id ------- -------- ----------- 5023 PS1372 375 5023 PS2091 1 845 5023 PS3333 3 437 5023 PS7777 2206 6380 PS7777 500 7067 PS3333 345 7067 PS7777 250 (затронуто 7 рядов)
Запрос выполнен в следующем порядке:
, где указан только пункт
строки с title_id , начинающиеся с «PS» (психология
книги),группа по собрала строки по
общий stor_id и title_id ,Сумма сумма рассчитана
общее количество проданных книг для каждой группы иНомер , содержащий пункт , исключенный из
окончательные результаты групп, для которых тоталы книг не превышают
200 книг.
Все предыдущие , имеющие экземпляра в
этот раздел соответствует стандартам SQL, которые определяют, что столбцы
в с выражением должно иметь единственное значение,
и должен быть в списке выбора или группе по пункту .
Однако расширения Transact-SQL до , имеющие , позволяют
столбцы или выражения не в списке выбора и не в группе
пунктом .
В следующем примере определяется средняя цена для каждого
тип заголовка, но исключает те типы, у которых не более 10 000 долларов США.
в общем объеме продаж, хотя сумма совокупных
не отображается в результатах.
выберите тип, средняя (цена) из названий группировать по типу имея сумму (total_sales)> 10000
тип ------------ ---------- бизнес 13,73 mod_cook 11.49 Popular_comp 21,48 trad_cook 15,96 (затронуты 4 ряда)
Расширение ведет себя так, как если бы столбец или выражение были
часть списка выбора, но не часть результатов. Если вы включите
неагрегированный столбец с имеет , но это
не является частью списка выбора или 9группа 0073 по пункту ,
запрос выдает результаты, аналогичные «расширенному» столбцу
расширение, описанное ранее в этой главе. Например:
выберите тип, средняя (цена) из названий группировать по типу имея total_sales> 4000
тип ------------ ---------- бизнес 13,73 бизнес 13,73 бизнес 13,73 mod_cook 11.49 Popular_comp 21,48 Popular_comp 21,48 психология 13.50 trad_cook 15,96 trad_cook 15.96 (затронуты 9 рядов)
В отличие от расширенного столбца, столбец total_sales
не отображается в окончательных результатах, однако количество отображаемых
строк для каждого типа зависит от total_sales для
каждое название. Запрос указывает, что три бизнеса, один mod_cook,
два Popular_comp, один по психологии и два trad_cook
общий объем продаж наименований превышает 4000 долларов.