【问题标题】:MySQL: list of sum for several conditions in one SQL statementMySQL:一个 SQL 语句中多个条件的总和列表
【发布时间】:2010-07-14 11:16:43
【问题描述】:

我的 MySQL 语句有问题:

select sum(x) as "sum", "01.06.2010" as "date" from (
   select distinct a.id as ID, a.dur as x from b_c 
      inner join c on b_c.c_id = c.id 
      inner join a on c.id = a.c_id 
      inner join a_au on a.id = a_aud.id 
      inner join d on a_au.rev = d.rev 
      where 
         b_c.b_id = 30 and 
         a_au.stat != 1 and 
         DATE(FROM_UNIXTIME(rtime)) = DATE('2010-06-01')
) AS SubSelectTable;

此语句返回一行,其中包含“sum”和“date”列。

现在我不仅有一个日期('2010-06-01'),我还有很多日期我必须得到它的 sum(),但不是在一行中。我希望每天有一个结果行。

例如,上面的语句返回我

sum            date
-------------------
 20      01.06.2010

现在我有日期 2010-06-01, 2010-06-02, 2010-06-03, ... 我能做的是为每个日期编写一个更改 DATE 的 sql 语句。因此,如果我有 10 个日期,我将有 10 个用于数据库的 sql 语句。 但我确实想要一个 SQL 语句,结果不应该是所有给定日期的总和,我希望每个日期有一个结果行。所以结果应该是这样的:

sum            date
-------------------
 20      01.06.2010
133      02.06.2010
 19      03.06.2010
 88      04.06.2010
...             ...

我该怎么做?有人知道吗?

非常感谢提前和最好的问候。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    使用 mysql GROUP BY 命令。完全未经测试的代码示例:

    select sum(x) as "sum", date as "date" from (
       select distinct a.id as ID, a.dur as x, DATE(FROM_UNIXTIME(rtime)) as date from b_c 
          inner join c on b_c.c_id = c.id 
          inner join a on c.id = a.c_id 
          inner join a_au on a.id = a_aud.id 
          inner join d on a_au.rev = d.rev 
          where 
             b_c.b_id = 30 and 
             a_au.stat != 1
    ) AS SubSelectTable
    group by date;
    

    见: http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html

    【讨论】:

    • 非常感谢,这似乎没问题,但我怎么能告诉声明,我只想在两个给定日期之间有结果行?我添加了一个“......其中......和日期在'2010-07-01'和'2010-07-10'之间”,但它不知道日期列。我该怎么做?
    • 啊,我当然可以这样做:“... where ... and DATE(FROM_UNIXTIME(rtime)) between '2010-07-01' and '2010-07-10'”但我认为性能不是很好,因为它必须计算两次时间戳到一个日期。
    • 已解决:按日期分组,日期介于“2010-07-01”和“2010-07-10”之间;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 2017-12-02
    • 2018-07-10
    • 2018-04-17
    相关资源
    最近更新 更多