我正在编写一个查询来生成基于 7 天滚动统计数据的图表。 newpost
和 linedpost
工作一切正常,但是当我尝试设置诸如 WHERE close IS NOT NULL AND (sent = 0 OR sent =1) AND created >= DATE(NOW()) - INTERVAL 7 DAY GROUP BY DATE(created))
显示 solvedpost
.我不知道如何去做这项工作。如有任何帮助,我们将不胜感激
我的查询:
SELECT
DATE(created) newpostdate,
COUNT(DISTINCT created) newpost,
COUNT(DISTINCT closed) closedpost,
(SELECT
COUNT(DISTINCT closed)
FROM
tickets
WHERE
closed IS NOT NULL
AND (sent = 0 OR sent = 1)
AND created >= DATE(NOW()) - INTERVAL 7 DAY
GROUP BY DATE(created)) solvedpost
FROM
tickets
WHERE
created >= DATE(NOW()) - INTERVAL 7 DAY
GROUP BY DATE(created);
最佳答案
使用条件聚合:
SELECT
DATE(created) newpostdate,
COUNT(DISTINCT created) newpost,
COUNT(DISTINCT closed) closedpost,
COUNT(DISTINCT
CASE WHEN closed IS NOT NULL AND (sent = 0 OR sent = 1)
THEN closed END
) solvedpost
FROM
tickets
WHERE
created >= DATE(NOW()) - INTERVAL 7 DAY
GROUP BY DATE(created);
您甚至不需要关闭的 IS NOT NULL
条件,因为 NULL 不被计算在内。
这是基于您的原始查询。但我认为你不应该使用DISTINCT
。如果您决定不使用DISTICT
,您的查询可能是:
SELECT
DATE(created) newpostdate,
COUNT(created) newpost,
COUNT(closed) closedpost,
SUM(closed IS NOT NULL AND (sent = 0 OR sent = 1)) solvedpost
FROM
tickets
WHERE
created >= DATE(NOW()) - INTERVAL 7 DAY
GROUP BY DATE(created);
关于mysql - 尝试使用子查询,但子查询返回多于一行的限定符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40059461/