Mysql 如何按日期查询SUM和WHERE,但行仍然存在

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_

如何查询总和字段合计和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_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。谢谢