Читайте также: |
|
При агрегировании, да и при вычислении любого численного выраже_ ния, всегда следует учитывать влияние значения null на результат вы_ числения. Для иллюстрации создадим простую таблицу для хранения числовых данных и заполним ее набором {1, 3, 5}:
mysql> CREATE TABLE number_tbl
_> (val SMALLINT);
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO number_tbl VALUES (1);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO number_tbl VALUES (3);
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO number_tbl VALUES (5);
Query OK, 1 row affected (0.00 sec)
Рассмотрим следующий запрос, применяющий пять агрегатных функ_ ций к этому набору чисел:
mysql> SELECT COUNT(*) num_rows,
_> COUNT(val) num_vals, _> SUM(val) total,
_> MAX(val) max_val, _> AVG(val) avg_val _> FROM number_tbl;
+__________+__________+_______+_________+_________+ | num_rows | num_vals | total | max_val | avg_val | +__________+__________+_______+_________+_________+
| | 3 | | 3 | | 9 | | 5 | | 3 | |
+__________+__________+_______+_________+_________+ 1 row in set (0.00 sec)
Как и следовало ожидать, результаты таковы: и count(*), и count(val) возвращают значение 3, sum(val) – значение 9, max(val) – 5, а avg(val) – 3. Теперь добавим в таблицу number_tbl значение null и выполним запрос еще раз:
mysql> INSERT INTO number_tbl VALUES (NULL);
Query OK, 1 row affected (0.01 sec)
mysql> SELECT COUNT(*) num_rows,
_> COUNT(val) num_vals, _> SUM(val) total,
_> MAX(val) max_val, _> AVG(val) avg_val _> FROM number_tbl;
+__________+__________+_______+_________+_________+ | num_rows | num_vals | total | max_val | avg_val | +__________+__________+_______+_________+_________+
| | 4 | | 3 | | 9 | | 5 | | 3 | |
Формирование групп | |
+__________+__________+_______+_________+_________+
1 row in set (0.00 sec)
Даже при добавлении в таблицу значения null функции sum(), max() и avg() возвращают те же значения; это означает, что они игнорируют все встречающиеся значения null. Функция count(*) теперь возвращает значение 4, что является правильным, поскольку в таблице number_tbl четыре строки, тогда как функция count(val) по_прежнему возвращает значение 3. Разница в том, что функция count(*) считает строки и по_ этому не подвержена влиянию значений null, содержащихся в строке. А вот функция count(val) считает значения в столбце val, пропуская все встречающиеся значения null.
Дата добавления: 2015-08-17; просмотров: 45 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Использование выражений | | | Группировка по нескольким столбцам |