0

我需要执行以下查询但无法执行。

SELECT * 
FROM (SELECT * 
      FROM rider_status 
      order by created_date DESC) as riderActice 
INNER JOIN rider_user ON rider_userId = rider_user.id 
Where rider_user.isActive = 1 
AND online_status = 1 
GROUP by rider_userId

错误:"#1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'riderActice.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by"

我已经阅读了一些博客并找到了以下解决方案。

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

但是执行上述解决方案我遇到了另一个问题

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

如果我遗漏了什么或做错了,请告诉我

4

1 回答 1

1

您不能从表中选择所有(* 表示所有)列并执行group by一列。这就是您收到错误的原因。如果列在 select 子句中并且它不是聚合函数的一部分,那么它必须在 group by 子句中。

riderActice此外,使用您在连接两个表(子查询和一个表)时创建的别名。

这是一个小演示,演示了我的答案的第一部分。 https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=b10244e667e59bffb146170014dc69ba

如果要选择所有列,请执行以下操作:

SELECT riderActice.rider_userId
         , riderActice.created_date
         , rider_user.id
         , rider_user.isActive
         , rider_user.online_status 
FROM rider_status as riderActice 
INNER JOIN rider_user ON riderActice.rider_userId = rider_user.id 
WHERE rider_user.isActive = 1 
AND rider_user.online_status = 1 
GROUP BY riderActice.rider_userId
         , riderActice.created_date
         , rider_user.id
         , rider_user.isActive
         , rider_user.online_status

如果您不想按每列分组,请向我们解释您需要什么,但这是您问题的答案。

于 2020-02-24T07:42:18.663 回答