DB2 – система управления реляционными базами данных. Заданное число упорядоченных столбцов и неупорядоченные строки, страница 15

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 может Кусать!