Mysql 如何按日期查询SUM和WHERE,但行仍然存在
如何查询总和字段合计和mydate之间的位置,但行仍然存在,只需将值total更改为0即可。请检查我下面的解释: 我有两个表,名称是category_result和result_value 以下是表类别结果的结构和值: 以下是表结果_值中的结构和值: 我现在的问题是:Mysql 如何按日期查询SUM和WHERE,但行仍然存在,mysql,Mysql,如何查询总和字段合计和mydate之间的位置,但行仍然存在,只需将值total更改为0即可。请检查我下面的解释: 我有两个表,名称是category_result和result_value 以下是表类别结果的结构和值: 以下是表结果_值中的结构和值: 我现在的问题是: SELECT c.name, SUM(rv.total) as total_all FROM category_result c LEFT JOIN result_values rv ON c.id=rv.id_category_
SELECT c.name, SUM(rv.total) as total_all FROM category_result c
LEFT JOIN result_values rv ON c.id=rv.id_category_value
WHERE rv.mydate >= '2013-05-01' AND rv.mydate <= '2013-07-01'
GROUP BY c.id
但我想要的不是这样,我想要的结果大致如下:
name total_all
One 0
Two 0
Three 1
Four 8
Five 7
所以我希望名称仍然存在,但是如果上面mydate的where,那么名称1和名称2没有按mydate列出,所以我希望行中的值total_all为null或0
提前感谢。使用其他加入
SELECT t1.name, t2.total_all
FROM category_result t1
LEFT JOIN
(
SELECT c.id, SUM(rv.total) as total_all FROM category_result c
LEFT JOIN result_values rv ON c.id=rv.id_category_value
WHERE rv.mydate >= '2013-05-01' AND rv.mydate <= '2013-07-01'
GROUP BY c.id
) t2 ON t1.id = t2.id
使用另一个连接
SELECT t1.name, t2.total_all
FROM category_result t1
LEFT JOIN
(
SELECT c.id, SUM(rv.total) as total_all FROM category_result c
LEFT JOIN result_values rv ON c.id=rv.id_category_value
WHERE rv.mydate >= '2013-05-01' AND rv.mydate <= '2013-07-01'
GROUP BY c.id
) t2 ON t1.id = t2.id
将求和查询设置为嵌套查询,并将其与数据联接
SELECT ct.name, ISNULL(s.total_all, 0) FROM category_result cr
LEFT JOIN (
SELECT id_category_value, SUM(rv.total) as total_all FROM result_values
WHERE rv.mydate >= '2013-05-01' AND rv.mydate <= '2013-07-01'
GROUP BY c.id
) s rv ON cr.id = s.id_category_value
以及可以移出语句的位置。将求和查询设为嵌套查询,并将其与数据连接起来
SELECT ct.name, ISNULL(s.total_all, 0) FROM category_result cr
LEFT JOIN (
SELECT id_category_value, SUM(rv.total) as total_all FROM result_values
WHERE rv.mydate >= '2013-05-01' AND rv.mydate <= '2013-07-01'
GROUP BY c.id
) s rv ON cr.id = s.id_category_value
并且Where语句可以移出。您只需要将Where子句移到join中。否则,这将排除没有日期的所有类别结果:
SELECT c.name, COALESCE(SUM(rv.total),0) as total_all
FROM category_result c
LEFT JOIN result_values rv ON c.id=rv.id_category_value AND rv.mydate >= '2013-05-01' AND rv.mydate <= '2013-07-01'
GROUP BY c.id
请注意,我们使用COALESCE,否则1和2的和将为null而不是0。您只需要将where子句移动到join中。否则,这将排除没有日期的所有类别结果:
SELECT c.name, COALESCE(SUM(rv.total),0) as total_all
FROM category_result c
LEFT JOIN result_values rv ON c.id=rv.id_category_value AND rv.mydate >= '2013-05-01' AND rv.mydate <= '2013-07-01'
GROUP BY c.id
请注意,我们使用COALESCE,否则1和2的和将为null而不是0。尝试完全外部连接而不是左连接尝试完全外部连接而不是左连接Hello@Karel,谢谢您的帮助,但得到错误1582-在调用本机函数“ISNULL”时参数计数不正确已解决我将ISNULLs.total\u all,0更改为s.total\u all。谢谢。您好@Karel,谢谢您的帮助,但是得到错误1582-本机函数'ISNULL'调用中的参数计数不正确已解决。我将ISNULLs.total\u all,0更改为s.total\u all。谢谢