› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
superwhite
V2EX  ›  MySQL

当 MySQL 需要根据聚合的结果排序时,应该如何处理?

  •  
  •   superwhite · May 20, 2020 · 4216 views
    This topic created in 2322 days ago, the information mentioned may be changed or developed.

    表 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 是必须的吗?根据聚合的结果排序有问题吗?

    Supplement 1  ·  May 20, 2020

    表 A ID NAME

    表 B ID AID TIME //一条表 A 对应多条表 B 的记录,一对多

    表 C ID AID TIME //一条表 A 对应多条表 B 的记录,一对多

    表 D ID AID AGE //一条表 A 对应一条表 D 的记录,一对一

    4 replies  •  2020-05-21 08:06:12 +08:00
    allAboutDbmss
        1
    allAboutDbmss  
       May 20, 2020
    首先没怎么看懂你对 A B C D 的描述 (如果可以可以给一个 minimal 数据集 或者 画个图)

    但是 group by A.id 是必须的, 不然`select A.id`会 SQL 编译错误
    superwhite
        2
    superwhite  
    OP
       May 20, 2020
    @allAboutDbmss sorry,写的时候以为会换行
    superwhite
        3
    superwhite  
    OP
       May 20, 2020
    是的,根据 only_full_group_by 的 sql mode,不加是会报错。我想知道,我这样的 ordey by 一个聚合后的字段是否合理
    lihongming
        4
    lihongming  
       May 21, 2020 via iPhone
    建议了解一下 SQL 命令真正的执行顺序,并不是按书写顺序来的。

    绝大多数数据库按以下顺序执行:

    from (以及 join )
    where
    group by
    having
    select
    order by
    limit

    上述命令,每一步都是基于上一步的结果再执行。所以你的 order by 必须有相应的列才能用。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2943 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 12:22 · PVG 20:22 · LAX 05:22 · JFK 08:22
    ♥ Do have faith in what you're doing.