使用 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 null(x = null
和 x != 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
感谢所有帮助过我的人。我从你的回答中学到了很多!!
在我的 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 null(x = null
和 x != 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
感谢所有帮助过我的人。我从你的回答中学到了很多!!