代码之家  ›  专栏  ›  技术社区  ›  Tim

mysql:一条sql语句中多个条件的和列表

  •  1
  • Tim  · 技术社区  · 16 年前

    我的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,… 我能做的就是为每个日期编写一个SQL语句来更改日期。因此,如果我有10个日期,我将有10个用于数据库的SQL语句。 但我确实希望它与一个SQL语句一起使用,并且结果不应该是所有给定日期的总和,我希望每个日期都有一个结果行。所以结果应该是这样的:

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

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

    提前多谢,谨致问候。

    1 回复  |  直到 16 年前
        1
  •  3
  •   tttppp    16 年前

    使用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