2010-06-16 3 views
14

Я хочу знать, как я могу найти все значения, которые являются NULL в базе данных MySQL, например, я пытаюсь отобразить всех пользователей, у которых пока нет среднего.Как подсчитать значения NULL в MySQL?

Вот код MySQL.

SELECT COUNT(average) as num 
FROM users 
WHERE user_id = '$user_id' 
AND average IS_NULL 
+2

Подождите, вы пытаетесь показать пользователям или подсчету? Ваш вопрос не соответствует вашему образцу. –

+0

Ваш ответ был правильным. – abbr

ответ

12
SELECT 
    COUNT(*) as num 
FROM 
    users 
WHERE 
    user_id = '$user_id' AND 
    average IS NULL 
+0

«count (column)» на самом деле не будет считать строку со значением столбца «null» – andy

2

Я может быть что-то отсутствует MySQL конкретные, но это будет работать в SQL сервере

SELECT COUNT(*) as num 
FROM users 
WHERE user_id = '$user_id' 
AND average IS NULL 
8

Кроме того, вы можете:

Select Count(*) - Count(Average) as NullAverages 
From Users 
Where user_id = '$user_id' 
+0

Я не думаю, что это работает в MySql – dplass

+1

Кажется, что я отлично работаю в MySQL для меня и * MUCH * быстрее, чем «случай, когда» подходит. – ChrisV

4

вы на правильном пути , Удалите «_» из «IS_NULL» и измените «COUNT (среднее значение)» на «COUNT (1)», и вы получите его.

Для получения дополнительной информации о работе с NULL в MYSQL см http://dev.mysql.com/doc/refman/5.0/en/working-with-null.html

И для работы с IS NULL специально см

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#operator_is-null

30

более общий вариант (который не зависит от где п и, следовательно, ограничивает ваши общие результаты):

SELECT 
    SUM(CASE WHEN average IS NULL THEN 1 ELSE 0 END) As null_num, 
    SUM(CASE WHEN average IS NOT NULL THEN 1 ELSE 0 END) AS not_null_num 
FROM users 

Это не лучше, чем конкретный q ueries, представленный другими ответами здесь, но он может использоваться в ситуациях, когда использование ограничения, где предложение нецелесообразно (из-за другой информации, необходимой) ...

+1

Спасибо - я полностью забыл о опции «case when» ... –

+1

В MySQL синтаксически гораздо проще использовать функцию 'ISNULL()', чем использовать 'CASE' для этой конкретной цели. – Air

+0

Возможно, вы можете использовать предложение IF следующим образом: SELECT SUM (IF (IFNULL (среднее значение), 1, 0) AS null_num, SUM (IF (IFNULL (среднее значение), 0, 1) AS not_null_num FROM пользователей – andy

1

Немного поздно, но вы можете сделать это в MySQL 5.0.51 :

SELECT COUNT(*) AS total, COUNT(field1) AS notNullFields1 
FROM table 
GROUP BY field5, field6 

С уважением.

+0

на http://dev.mysql.com/doc/refman/5.0/ru/group-by-functions.html#function_count – ATorras

Смежные вопросы