【问题标题】:H2 database: Column "U" must be in the GROUP BY list; SQL statementH2 数据库:“U”列必须在 GROUP BY 列表中; SQL 语句
【发布时间】:2020-07-19 18:13:58
【问题描述】:

我的原生查询如下所示:

SELECT u
FROM (SELECT max(difficulty), u
      FROM (SELECT sum(difficulty) AS difficulty, username AS u
            FROM user_answer ua
                     JOIN question q ON ua.question_id = q.id
                     JOIN answer a ON ua.answer_id = a.id
                     JOIN user_quiz uq ON ua.user_quiz_id = uq.id
                     JOIN account ac ON uq.account_id = ac.id
            WHERE a.correct = 1
              AND uq.quiz_start_date_time >= (CURDATE() - INTERVAL 7 DAY)
            GROUP BY ua.user_quiz_id
            ORDER BY difficulty DESC) AS max_week) as d_u

在 MySQL 中一切正常。我在 H2 数据库中有错误:

org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "U" must be in the GROUP BY list; SQL statement:
SELECT u FROM (SELECT max(difficulty), u FROM (SELECT sum(difficulty) AS difficulty, username AS u FROM user_answer ua JOIN question q ON ua.question_id = q.id JOIN answer a ON ua.answer_id = a.id JOIN user_quiz uq ON ua.user_quiz_id = uq.id JOIN account ac ON uq.account_id = ac.id WHERE a.correct = 1 AND uq.quiz_start_date_time >= (CURDATE() - INTERVAL 7 DAY) GROUP BY ua.user_quiz_id ORDER BY difficulty DESC) AS max_week) as d_u [90016-200]

如何解决?

【问题讨论】:

    标签: java mysql spring hibernate h2


    【解决方案1】:

    只需在用户名周围添加一个聚合函数

        SELECT u
        FROM (SELECT max(difficulty), u
              FROM (SELECT sum(difficulty) AS difficulty, MAX(username) AS u
                    FROM user_answer ua
                             JOIN question q ON ua.question_id = q.id
                             JOIN answer a ON ua.answer_id = a.id
                             JOIN user_quiz uq ON ua.user_quiz_id = uq.id
                             JOIN account ac ON uq.account_id = ac.id
                    WHERE a.correct = 1
                      AND uq.quiz_start_date_time >= (CURDATE() - INTERVAL 1 MONTH)
                    GROUP BY ua.user_quiz_id
                    ORDER BY difficulty DESC
                ) AS max_month
            GROUP BY u
            ) as d_u
    

    启用 ONLY_FULL_GROUP_BY 选项后,您需要使所有列都具有聚合函数或将它们放在 GROUP By 中,参见https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html

    【讨论】:

    • 尝试新的,否则您必须为您的表格提供数据
    • 现在很棒!谢谢!
    猜你喜欢
    • 2020-02-08
    • 2016-05-26
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 2015-04-20
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多