select list的表达式不在group by子句中,并且包含未聚合的列

3lxsmp7m  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(363)

我在laravel雄辩的提问中有一个错误:
“选择列表的表达式不在group by子句中,并且包含未聚合的列”

$data = DB::table('passages')
        ->select('passages.*','users.name','users.family','valid_users.user_id','valid_users.valid_card_id','valid_users.valid_card_decimal','valid_users.valid_card_hex')
        ->join('valid_users','valid_users.id','=','passages.valid_user_id')
        ->join('users','valid_users.user_id','=','users.id')
        ->join('accounts','accounts.user_id','=','users.id')
        ->whereIn('accounts.role_id',$roles)
        ->groupBy('valid_user_id')
        ->get();
az31mfrm

az31mfrm1#

每当我们使用GROUPBY子句时,我们选择的其他列都必须使用aggegate函数(如:min、max、avg、sum)。
例子:

select sum(t.name),t.age
from table1 t
group by t.age
tgabmvqs

tgabmvqs2#

查找最后一行的一种方法是使用一个相关的子查询,该子查询标识last(假设您有这样做的方法),在本例中,last被标识为max auto\u incremented id

drop table if exists t;
create table t( id  int auto_increment primary key, userid  int, val varchar(10));
insert into t (userid,val) values
(1,100),(2,10),(1,15),(2,20);

select t.* 
from t
where id = (select max(id) from t t1 where t1.userid = t.userid);

+----+--------+------+
| id | userid | val  |
+----+--------+------+
|  3 |      1 | 15   |
|  4 |      2 | 20   |
+----+--------+------+
2 rows in set (0.00 sec)

相关问题