|
Программирование >> Преобразование значений null
30 20 30 30 10 20 10 30 20 30 20 10 500 1300 select count(*), count(deptno), count(comm), count(hello) from emp COUNT(*) COUNT(DEPTNO) COUNT(COMM) COUNT(HELLO) select deptno, count(*), count(comm), count(hello) from emp group by deptno DEPTNO COUNT(*) COUNT(COMM) COUNT(HELLO) 10 20 30 Если во всех строках переданного в COUNT столбца содержатся значения NULL или если таблица пуста, COUNT возвратит нуль. Следует также заметить, что даже если в операторе SELECT определена только агрегатная функция, по-прежнему можно осуществлять группировку по другим столбцам таблицы; например: select count(*) from emp group by deptno COUNT(*) Обратите внимание, что группировка осуществляется по DEPTNO, несмотря на то, что этот столбец не указан в SELECT. Включение в список оператора SELECT столбца, по которому осуществляется группировка, делает код более понятным, но не является обязательным. Если все-таки столбец включен (в список SELECT), он обязательно должен быть указан в операторе GROUP BY. Обсуждение Выражение COUNT(*) обеспечивает подсчет всех строк (независимо от их значений; поэтому учитываются как строки со значениями NULL, так и строки с определенными значениями). Но когда в функции COUNT задан конкретный столбец, подсчитывается количество не-NULL значений в этом столбце. В обсуждении предыдущего рецепта затрагивалось это различие. В данном рецепте функция COUNT(COMM) возвращает число не-NULL значений в столбце COMM. Поскольку комиссионные получают только служащие, занимающие определенную должность, в результате выполнения COUNT(COMM) возвращает количество таких служащих. Вычисление текущей суммы Задача Требуется вычислить текущую сумму значений столбца. Решение В качестве примера следующие решения показывают, как вычисляется текущая сумма заработных плат всех служащих. Для удобства чтения результаты по возможности упорядочены по столбцу SAL, чтобы можно было увидеть процесс вычисления текущих сумм. См. также Приложение А для повторения функциональных возможностей GROUP BY. Подсчет значений в столбце Задача Требуется подсчитать количество определенных (не-NULL) значений в столбце. Например, стоит задача выяснить, сколько служащих получают комиссионные. Решение Подсчитываем число не-NULL значений в столбце COMM таблицы EMP, используя функцию COUNT и имя столбца в качестве ее аргумента: select count(comm) from emp COUNT(COMM)
MySQL, PostgreSQL и SQL Server Для вычисления текущей суммы используется скалярный подзапрос (без оконной функции, такой как SUM OVER, нельзя так просто упорядочить результирующее множество по столбцу SAL, как в решении для DB2 и Oracle). В конечном счете сумма вычисляется правильно (окончательное значение совпадает с полученным в предыдущем рецепте), но промежуточные значения отличаются из-за отсутствия упорядоченности: 1 select e.ename, e.sal, 2 (select sum(d.sal) from emp d 3 where d.empno <= e.empno) as running total 4 from emp e 5 order by 3
Для вычисления текущей суммы используется аналитическая версия функции SUM:
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |