我有一个带有2个文件的数据库,一个日期和一个字符串(有更多的文件,但只有这些对此有趣)字符串可以为空。现在我想计算有多少字符串是空的,有多少字符串不是。
SELECT
`date`, `serial`, count(`serial`) as count
FROM
`updates`
WHERE
`date` BETWEEN '2012-11-25 00:00:00' AND '2012-11-25 23:59:59'
GROUP BY
`serial`
这是我目前的代码。我真的不知道如何以一种好的方式聚合它。
问候 亚历
//编辑
结果我希望:
2012-11-25 NULL 2452
2012-11-25 NOT NULL 3476
答案 0 :(得分:2)
如果要计算空字符串而不是空值,可以使用:
SELECT
`date`,
count(`serial`) as count_not_nulls,
count(case when `serial` is null then 1 end) as count_nulls
FROM `updates`
WHERE `date` BETWEEN '2012-11-25 00:00:00' AND '2012-11-25 23:59:59'
GROUP BY `date`
修改强>
SELECT `date`, 'NOT NULL', count(`serial`) as count
FROM `updates`
WHERE `date` BETWEEN '2012-11-25 00:00:00' AND '2012-11-25 23:59:59'
AND `serial` is not null
GROUP BY `date`
UNION
SELECT `date`, 'NULL', count(1) as count
FROM `updates`
WHERE `date` BETWEEN '2012-11-25 00:00:00' AND '2012-11-25 23:59:59'
AND `serial` is null
GROUP BY `date`
答案 1 :(得分:1)
简而言之
SELECT
DATE( `date` ) the_date,
CASE WHEN serial IS NULL THEN 'NULL' ELSE 'NOT NULL' END sernull,
COUNT(*)
FROM
updates
WHERE
DATE( `date` ) = '2012-11-25'
GROUP BY
the_date,
sernull
答案 2 :(得分:0)
这为您提供了serial不为空的计数
SELECT `date`, `serial`, count(`serial`) as count
FROM `updates`
WHERE `date` BETWEEN '2012-11-25 00:00:00' AND '2012-11-25 23:59:59'
and serial is not null
GROUP BY `serial`
这将为您提供serial为null的计数
SELECT `date`, `serial`, count(`serial`) as count
FROM `updates`
WHERE `date` BETWEEN '2012-11-25 00:00:00' AND '2012-11-25 23:59:59'
and serial is null
GROUP BY `serial`
答案 3 :(得分:0)
希望这对你有所帮助。试试这个 -
SELECT 'date','serial',count('serial') as count
FROM
(SELECT 'date',
CASE WHEN 'serial' is null THEN `NULL'
ELSE 'NOT NULL' END as serial
FROM `updates` WHERE `date` BETWEEN '2012-11-25 00:00:00' AND '2012-11-25 23:59:59' )
GROUP BY 'date,'serial'
祝你好运!