mysql - 尝试使用子查询,但子查询返回多于一行的限定符

标签 mysql subquery

我正在编写一个查询来生成基于 7 天滚动统计数据的图表。 newpostlinedpost 工作一切正常,但是当我尝试设置诸如 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/

相关文章:

mysql - yeoman 全栈生成器社交 Oauth 问题

php - 从 Laravel Link 加载 Webix 数据

sql - MS ACCESS : selecting only one record per "person" per date 中的子查询

mysql - 从为另一列指定了两个的表中获取行

mysql - 如何在左连接中使用子查询作为表

sql - 在 then of case when 语句中选择子查询?

mysql - SQL:如何比较表,即计算连接表中的行数?

javascript - 如何使用 Node js 和 html 构建客户端服务器应用程序?

MySQL ucfirst 不工作

mysql - 获取子查询中的最大输入日期