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