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