0

我有一个数据库,其中包含 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
4

4 回答 4

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`
于 2012-12-20T10:18:11.553 回答
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

SQL 小提琴演示

于 2012-12-20T10:35:48.337 回答
0

这为您提供序列不为空的计数

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`

这为您提供序列为空的计数

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`
于 2012-12-20T10:18:43.270 回答
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'

祝你好运!

于 2012-12-20T10:31:50.423 回答