mysql的sql_mode = ONLY_FULL_GROUP_BY的非聚合列

时间:2017-07-29 03:45:35

标签: php mysql

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

3 个答案:

答案 0 :(得分:1)

如果您使用mysql 5.7或更高版本,则可以尝试此操作

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

答案 1 :(得分:0)

两个问题。一,你在列列表中缺少一个逗号,而两个,使用该设置,你必须在你的组中包括所有非汇总列:

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 :(得分:0)

我怀疑你想要:

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);