【问题标题】:Nonaggregated column of sql_mode=ONLY_FULL_GROUP_BY of mysql [duplicate]mysql的sql_mode = ONLY_FULL_GROUP_BY的非聚合列[重复]
【发布时间】:2018-01-05 04:53:40
【问题描述】:

SQL 的 sql_mode = ONLY_FULL_GROUP_BY 出现问题 这个 SQL 怎么改写?

SELECT
    s.id,
    s.users_id,
    COUNT(*) as attempt,
    s.time
    s.language,
    s.is_public,
    u.name,
    u.nick
FROM
    s
INNER JOIN users u ON u.id = s.users_id
WHERE s.sid = 10 AND s.result = 1
GROUP BY s.users_id
ORDER BY s.time

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    两个问题。一,您在列列表中缺少一个逗号,二,使用该设置,您必须通过以下方式将所有非汇总列包含在您的组中:

    SELECT
        s.id,
        s.users_id,
        COUNT(*) as attempt,
        s.time,
        s.language,
        s.is_public,
        u.name,
        u.nick
    FROM
        s
    INNER JOIN users u ON u.id = s.users_id
    WHERE s.sid = 10 AND s.result = 1
    GROUP BY s.id,
        s.users_id,
        s.time,
        s.language,
        s.is_public,
        u.name,
        u.nick
    ORDER BY s.time
    

    【讨论】:

    • 就是这样,谢谢!
    【解决方案2】:

    如果你使用mysql 5.7或以上,你可以试试这个

    SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
    

    【讨论】:

      【解决方案3】:

      我怀疑你想要:

      SELECT u.id, u.name, u.nick, COUNT(*) as attempt,
             MIN(s.time) as time  -- maybe you want MAX()
      FROM s INNER JOIN
           users u
           ON u.id = s.users_id
      WHERE s.sid = 10 AND s.result = 1
      GROUP BY u.id
      ORDER BY MIN(s.time);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-12
        • 2018-04-13
        • 1970-01-01
        • 2020-06-14
        • 2020-02-29
        • 1970-01-01
        相关资源
        最近更新 更多