表 A ID NAME 表 B ID AID TIME //一条表 A 对应多条表 B 的记录,一对多 表 C ID AID TIME //一条表 A 对应多条表 B 的记录,一对多 表 D ID AID AGE //一条表 A 对应一条表 D 的记录,一对一
我现在预期的 SQL 为
select A.id,count(B.id) as bcount,count(c.id) as ccount,d.age from A join B Join C join D group by A.id order by bcount DESC limit 0,10;
想问下:group by 是必须的吗?根据聚合的结果排序有问题吗?
表 A ID NAME
表 B ID AID TIME //一条表 A 对应多条表 B 的记录,一对多
表 C ID AID TIME //一条表 A 对应多条表 B 的记录,一对多
表 D ID AID AGE //一条表 A 对应一条表 D 的记录,一对一
1
allAboutDbmss 2020-05-20 18:55:07 +08:00
|
2
superwhite OP @allAboutDbmss sorry,写的时候以为会换行
|
3
superwhite OP 是的,根据 only_full_group_by 的 sql mode,不加是会报错。我想知道,我这样的 ordey by 一个聚合后的字段是否合理
|
4
lihongming 2020-05-21 08:06:12 +08:00 via iPhone
建议了解一下 SQL 命令真正的执行顺序,并不是按书写顺序来的。
绝大多数数据库按以下顺序执行: from (以及 join ) where group by having select order by limit 上述命令,每一步都是基于上一步的结果再执行。所以你的 order by 必须有相应的列才能用。 |