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/

相关文章:

php - Codeigniter数据库配置

php - 每当我在表中添加多行数据时,都会收到错误消息 '' 获取未知属性”

php - 准备好的语句错误

mysql - 两个表的子查询

mysql - 在 'Where' 子句中执行两个子查询的良好替代方案

php - SQL 查询给出错误?

sql-server - 主查询中的子查询条件选择

sql - 是否可以重用子查询?

php - 如果案例为真,需要向用户抛出错误

php - MySQL - 按时间间隔返回登录尝试