使用 sproc 按小时计算 table 个值

Count table value by hour using sproc

在我的 table 中,我有日期列,上面有默认值 TIMESTAMP。我想按小时计算我的记录。我这样使用 sproc

    SELECT username, 


    COUNT(IF(HOUR(date)=8,1,NULL)  and (IF(docs != null))) AS '8:30  - 9:00', 
    COUNT(IF(HOUR(date)=9,1,NULL)  and (IF(docs != null))) AS '9:00 - 10:00',
    COUNT(IF(HOUR(date)=10,1,NULL) and (IF(docs != null))) AS '10:00 - 11:00',
    COUNT(IF(HOUR(date)=11,1,NULL) and (IF(docs != null))) AS '11:00 - 12:00',
    COUNT(IF(HOUR(date)=12,1,NULL) and (IF(docs != null))) AS '12:00 - 1:00',
    COUNT(IF(HOUR(date)=13,1,NULL) and (IF(docs != null))) AS '1:00 - 2:00',
    COUNT(IF(HOUR(date)=14,1,NULL) and (IF(docs != null))) AS '2:00 - 3:00',
    COUNT(IF(HOUR(date)=15,1,NULL) and (IF(docs != null))) AS '3:00 - 4:00',
    COUNT(IF(HOUR(date)=16,1,NULL) and (IF(docs != null))) AS '4:00 - 5:00',
    COUNT(disblid) 'Total'


FROM claimloans 
group by username;

没有

and (IF(docs != null))

部分我的存储过程完美运行。如果行文档值为空,我不想计算行数。我怎样才能做到这一点?

这是我的工作存储过程

SELECT username, 

    COUNT(IF(HOUR(date)=8,1,NULL))  AS '8:30  - 9:00', 
    COUNT(IF(HOUR(date)=9,1,NULL))  AS '9:00 - 10:00',
    COUNT(IF(HOUR(date)=10,1,NULL)) AS '10:00 - 11:00',
    COUNT(IF(HOUR(date)=11,1,NULL)) AS '11:00 - 12:00',
    COUNT(IF(HOUR(date)=12,1,NULL)) AS '12:00 - 1:00',
    COUNT(IF(HOUR(date)=13,1,NULL)) AS '1:00 - 2:00',
    COUNT(IF(HOUR(date)=14,1,NULL)) AS '2:00 - 3:00',
    COUNT(IF(HOUR(date)=15,1,NULL)) AS '3:00 - 4:00',
    COUNT(IF(HOUR(date)=16,1,NULL)) AS '4:00 - 5:00',
    COUNT(disblid) 'Total'


FROM claimloans 
group by username;

Nothing is ever equal to nullx = nullx != null 始终为假),因此您需要将 docs != NULL 更改为 docs IS NOT NULL

所以,这个表达式:

COUNT(IF(HOUR(date)=8,1,NULL))
date 的小时为 8 时,

计数 1,一个硬编码的非空表达式。如果将 1 替换为 doc

COUNT(IF(HOUR(date)=8,<b>doc</b>,NULL))

该函数将根据 doc 的内容进行额外计数。也就是说,它不仅会在小时数为 8 时统计行数,还会在 doc 同时不为 null 时统计行数。

感谢所有帮助过我的人。在你的帮助下,我做了以下 sproc,它完全符合我的要求。

    DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `hourcounter`(IN datestamp DATE)
BEGIN
SELECT username, 

    COUNT(IF(HOUR(modifytime)=8,1,NULL))  AS '8:30  - 9:00', 
    COUNT(IF(HOUR(modifytime)=9,1,NULL))  AS '9:00 - 10:00',
    COUNT(IF(HOUR(modifytime)=10,1,NULL)) AS '10:00 - 11:00',
    COUNT(IF(HOUR(modifytime)=11,1,NULL)) AS '11:00 - 12:00',
    COUNT(IF(HOUR(modifytime)=12,1,NULL)) AS '12:00 - 1:00',
    COUNT(IF(HOUR(modifytime)=13,1,NULL)) AS '1:00 - 2:00',
    COUNT(IF(HOUR(modifytime)=14,1,NULL)) AS '2:00 - 3:00',
    COUNT(IF(HOUR(modifytime)=15,1,NULL)) AS '3:00 - 4:00',
    COUNT(IF(HOUR(modifytime)=16,1,NULL)) AS '4:00 - 5:00',
    COUNT(docs) 'Total'


FROM claimloans 
WHERE docs != '' and DATE(date) = datestamp 
group by username;

   END

感谢所有帮助过我的人。我从你的回答中学到了很多!!