Mysql SQL查询摘要问题

Mysql SQL查询摘要问题,mysql,totals,Mysql,Totals,我是SQL新手,正在尝试创建一个工作SQL查询的总摘要。它列出了一个月数据的总结果。 现在我需要查询结果的总值。 因此,我创建了一个“查询中的查询”SQL片段,但由于缺乏SQL知识,它无法工作。我想这对你的职业选手来说是一个简单的解决办法:- 每日结果为一个月的工作SQL查询: SELECT DATE_FORMAT(date, '%d/%m/%y') AS Datum, COUNT(*) AS Berichten, SUM(CASE W

我是SQL新手,正在尝试创建一个工作SQL查询的总摘要。它列出了一个月数据的总结果。 现在我需要查询结果的总值。 因此,我创建了一个“查询中的查询”SQL片段,但由于缺乏SQL知识,它无法工作。我想这对你的职业选手来说是一个简单的解决办法:-

每日结果为一个月的工作SQL查询:

SELECT
          DATE_FORMAT(date, '%d/%m/%y') AS Datum,
          COUNT(*) AS Berichten,
          SUM(CASE WHEN virusinfected>0 THEN 1 ELSE 0 END) AS Virus,
          SUM(CASE WHEN (virusinfected=0 OR virusinfected IS NULL) AND isspam>0 THEN 1 ELSE 0 END) AS Ongewenst,
          SUM(CASE WHEN (virusinfected=0 OR virusinfected IS NULL) AND (isspam=1) AND isrblspam>0 THEN 1 ELSE 0 END) AS RBL,
          SUM(size) AS Grootte
         FROM
          maillog
         WHERE
          1=1
        AND (1=1)
        AND
         date < '2017-04-01'
        AND
         date >= '2017-03-01'
        AND
         to_domain = 'domain1.nl'
        OR
        date < '2017-04-01'
        AND
         date >= '2017-03-01'
        AND
         to_domain = 'domain2.nl'

         GROUP BY
          Datum
         ORDER BY
          date
试图创建月度总计的不正确查询:

SELECT  Datum,
    SUM(Berichten) AS Berichten,
    SUM(Virus) AS Virus,
    SUM(Ongewenst) AS Ongewenst,
    SUM(RBL) AS RBL,
    SUM(Grootte) AS Grootte,
    FROM    (   SELECT
                  DATE_FORMAT(date, '%d/%m/%y') AS Datum,
                  COUNT(*) AS Berichten,
                  SUM(CASE WHEN virusinfected>0 THEN 1 ELSE 0 END) AS Virus,
                  SUM(CASE WHEN (virusinfected=0 OR virusinfected IS NULL) AND isspam>0 THEN 1 ELSE 0 END) AS Ongewenst,
                  SUM(CASE WHEN (virusinfected=0 OR virusinfected IS NULL) AND (isspam=1) AND isrblspam>0 THEN 1 ELSE 0 END) AS RBL,
                  SUM(size) AS Grootte
                 FROM
                  maillog
                 WHERE
                  1=1
                AND (1=1)
                AND
                 date < '2017-04-01'
                AND
                 date >= '2017-03-01'
                AND
                 to_domain = 'domain1.nl'
                OR
                date < '2017-04-01'
                AND
                 date >= '2017-03-01'
                AND
                 to_domain = 'domain2.nl'

                 GROUP BY
                  Datum
                 ORDER BY
                  date
            ) t
    GROUP BY Datum;

提前感谢。

只需在第一条SQL语句中添加一点内容即可完成所需操作:在group by子句之后添加:

它将比带有子查询的版本运行得更高效,尽管它可以这样工作,但是您应该删除外部GROUPBY子句,而不是在那里选择DATAM,因为您不再需要每个日期的总计,而是总体


尽管如此,您仍将丢失详细信息,然后只获得总体总数。您必须在原始查询中使用union来获取两个级别的合计。您可以想象,with rollup修改器将更有效地完成这项工作。

非常感谢trincot!格拉格·格达安-
GROUP BY Datum WITH ROLLUP