|
Программирование >> Преобразование значений null
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(*)
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |