Программирование >>  Преобразование значений null 

1 ... 61 62 63 [ 64 ] 65 66 67 ... 219


29025

При создании нескольких групп или окон данных используется функция SUM в сочетании с оператором GROUP BY. В следующем примере вычисляются суммы заработных плат служащих по отделам:

1 select deptno, sum(sal) as total for dept

2 from emp

3 group by deptno

DEPTNO TOTAL FOR DEPT

10 8750

20 10875

30 9400

select min(comm), max(comm) from emp group by deptno

MIN(COMM) MAX(COMM)

0 1300

Здесь группировка проводится по столбцу DEPTNO, хотя его нет в списке оператора SELECT. Включение в список SELECT столбца, по которому осуществляется группировка, делает код более понятным, но не является обязательным. Однако все столбцы списка SELECT запроса GROUP BY должны быть указаны в операторе GROUP BY.

См. также

Приложение А для повторения функциональных возможностей GROUP BY.

Вычисление суммы значений столбца Задача

Требуется вычислить сумму всех значений столбца, например заработных плат всех служащих.

Решение

При вычислении суммы для всей таблицы просто применяем функцию SUM к соответствующим столбцам без использования оператора

GROUP BY:

1 select sum(sal)

2 from emp

SUM(SAL)



Обсуждение

При вычислении суммы всех заработных плат для каждого отдела создаются группы или окна данных. Заработная плата всех служащих одного отдела складывается и получается общая сумма для этого отдела. Это пример агрегации в SQL, поскольку предметом рассмотрения является не детальная информация, такая как заработная плата каждого отдельно взятого служащего, а конечный результат для всего отдела. Важно отметить, что функция SUM игнорирует значения NULL, но для группы SUM может возвращать NULL, что показано ниже. Служащие 10-го отдела (DEPTNO 10) не получают комиссионных, таким образом, при группировке по DEPTNO 10 и суммировании значений столбца COMM получаем группу, для которой SUM возвращает значение NULL:

select deptno, comm

from emp

where deptno in (10,30)

order by 1

DEPTNO COMM

10 10 10

30 300 30 500

30 0

30 1300

select sum(comm) from emp

SUM(COMM)

2100

select deptno, sum(comm) from emp

where deptno in (10,30) group by deptno

DEPTNO SUM(COMM) 10

30 2100

См. также

Приложение А для повторения функциональных возможностей GROUP BY.



При создании нескольких групп или окон данных используем функцию COUNT с оператором GROUP BY:

1 select deptno, count(*)

2 from emp

3 group by deptno

DEPTNO COUNT(*)

10 3

20 5

30 6

Обсуждение

При подсчете количества служащих в каждом отделе мы создаем группы или окна данных. При выявлении каждого нового служащего значение счетчика увеличивается на единицу, таким образом, вычисляется общее значение для соответствующего отдела. Это пример агрегации в SQL, поскольку рассматриваются не заработная плата или должность каждого отдельно взятого служащего, а конечный результат для каждого отдела. Важно отметить, что функция COUNT игнорирует значения NULL для столбца, имя которого передается в нее в качестве аргумента, но включает значения NULL при использовании символа * или любой константы. Рассмотрим:

select deptno, comm from emp

DEPTNO COMM

30 300

Подсчет строк в таблице Задача

Требуется подсчитать число строк в таблице или количество значений в столбце. Например, необходимо найти общее число служащих и количество служащих в каждом отделе.

Решение

При подсчете строк всей таблицы просто используем функцию COUNT с символом * :

1 select count(*)

2 from emp

COUNT(*)



1 ... 61 62 63 [ 64 ] 65 66 67 ... 219

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика