SELECT * FROM company
ORDER BY co_name, address DESC
Строки результирующего множества будут сначало упорядочены по имени компании, а затем внутри компании, в обратном порядке, по адресу.
DISTINCT
ID |
Dept |
Salary |
100 101 102 212 213 |
234 124 234 100 124 |
20000 30000 20000 5000 25000 |
SELECT DISTINCT Dept
FROM Salaries
Salaries
Dept |
100 124 234 |
Result
SELECT операция по умолчанию возвращает строки, среди которых могут быть и дублирующиеся. Предложение DISTINCT позволяет исключить все дублирующиеся строки из результирующегося множества.
Исключение производится последовательно для всех данных, таким образом DISTINCT DEPT возвращает номера отделов, в то время как DISTINCT DEPT, SALARY возвращает одну строку для каждой комбинации отдел/зарплата в таблице.
GROUP BY
ID |
Dept |
Salary |
100 101 102 212 213 |
234 124 234 100 124 |
20000 30000 20000 5000 25000 |
SELECT Dept, SUM(Salary)
FROM Salaries
GROUP BY Dept
Salaries
Dept |
Salary |
100 124 234 |
5000 55000 40000 |
Result
Предложение GROUP BY используется вместе с функциями столбца для формирования суммарной информации по сгруппированным строкам. Строки объеденяются на основании одинаковых значений в столбцах группирования.
В приведенном примере запрашивалась информация о зарплате и получен результат, который показывает итоговую сумму зарплаты по каждому отделу.
В связи с использованием GROUP BY необходимо помнить, что столбцы, перечисленные в списке выборки, должны либо встретиться в предложении GROUP BY, либо они должны быть атрибутом функции столбца. Поэтому, так как Dept не задан в функции столбца и отсутствует в списке GROUP BY, следующий запрос будет ошибочным:
SELECT Dept, AVG(Salary)
FROM Salaries
HAVING
ID |
Dept |
Salary |
100 101 102 212 213 |
234 124 234 100 124 |
20000 30000 20000 5000 25000 |
SELECT Dept, SUM(Salary)
FROM Salaries
GROUP BY Dept
HAVING SUM(Salary) > 28000
Salaries
Dept |
Salary |
124 234 |
55000 40000 |
Result
Предложение HAVING играет такую же роль для групп строк, что и фраза WHERE для строк. Вначале выполняется функция столбца, затем к результату применяется HAVING. Если результат удовлетворяет условию, он передается на выход.
Предложение WHERE используется чтобы отфильтровать строки для агрегатной функции и предложение HAVING используется чтобы отфильтровать результат.
Пример:
SELECT Dept, SUM(Salary)
FROM Salaries
WHERE Dept BETWEEN 2 AND 50 AND Salary > 10000
GROUP BY Dept
HAVING SUM(Salary) > 40000
Предложение HAVING оставляет в результирующем множестве информацию только о персонах, работающих в отделах с суммарной заработной платой больше 28000.
Остерегайтесь, SQL может Кусать!
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.