当COUNT(*)结果返回0行
时,我的以下查询不返回行SELECT COUNT(id) test,
UNIX_TIMESTAMP(my_time)*1000 d
FROM chat_table
WHERE dept_id = 5
AND my_time >="2015-03-30"
GROUP BY DAY(my_time)
ORDER BY d ASC;
我需要GROUP BY日甚至返回0行。怎么可以加入同一个表?或任何想法?
答案 0 :(得分:1)
您只能拥有基于存在的值的组。如果您的表中不存在值,例如timestamp'2015-04-01 12:00:00',则它不能成为结果的一部分。
您可以通过以下方式解决此问题:
0
最好的选择是第一个:保持查询不变,但在程序中编写逻辑,启动查询,如果时间戳不在结果集中,则自动假设计数为零。
例如,在PHP中:
$countsPerTimestamp = array();
foreach ($stmt->fetchAll() as $row) {
$countsPerTimestamp[$row['d']] = $row['test'];
}
$searchTimestamp = '2015-04-05 12:13:14';
if (isset($countsPerTimestamp[$searchTimestamp])) {
echo 'Count for now is: ' . $countsPerTimestamp[$searchTimestamp];
}
else {
echo 'Count for now is: 0';
}
答案 1 :(得分:0)
如果您的表每天都有数据,但where
子句将其过滤掉,那么最简单的解决方案是使用条件聚合:
SELECT SUM(dept_id = 5) as test,
UNIX_TIMESTAMP(my_time)*1000 as d
FROM chat_table
WHERE my_time >= '2015-03-30'
GROUP BY DAY(my_time)
ORDER BY d ASC;
如果这些条件不成立,那么您需要从所有日期的列表开始并使用left join
。