虽然没有数据,但聚合给出0的结果

时间:2016-09-30 09:05:51

标签: mysql sql join

使用连接跟随sql:

SELECT sum(r) AS amount
FROM rep.stats
JOIN rep.valdata
    ON rep.valdata.id = rep.stats.data_id
WHERE rep.valdata.custid = 3657 AND
      rep.stats.sdatetime LIKE '2014-09-29%'

问题,我的ResultSet给了我一行作为结果,值为0虽然没有数据可用。我希望没有resultSet。怎么了?是吗,因为sum(r)默认返回0?

这会给我带来麻烦,因为0值也是一个值,并会显示出来。

1 个答案:

答案 0 :(得分:1)

您的查询是一个没有GROUP BY的聚合查询。它是一个聚合查询,因为您在SUM()子句中有一个聚合函数(select)。

没有group by的聚合查询将所有行视为组 - 并且所有意味着所有,包括 none 。因此,这样的查询总是只返回一行,它汇总了所有行。

也就是说,查询不应该返回值0。它应该返回一行,其值为NULL

如果您不想要任何行,请添加group by

SELECT sum(r) AS amount
FROM rep.stats s JOIN
     rep.valdata v
      ON v.id = s.data_id
WHERE v.custid = 3657 AND
      s.sdatetime >= '2014-09-29' AND
      s.sdatetime < '2015-09-30'
GROUP BY v.custid;

注意:

  • 聚合查询现在有GROUP BY。这将为每个组返回一行,如果没有组,则不会返回任何行。
  • 表别名使查询更易于编写和阅读。
  • 不要将LIKE与日期/时间值一起使用。这需要将日期/时间转换为字符串,这可能取决于国际化设置。另外,它可以防止使用索引。