mysql - SQL:按一列中相同值的数量排序,无需聚合/收缩

标签 mysql sql sqlite

我有一个对象表及其类型,如下所示:

objectType | object

107          Boeing
107          Airbus
323          Audi
323          Mercedes
323          BMW
985          Ducati

我想计算如下所示的结果表,其中每行显示 groupSizeOfObject 列,并表示表中与该行中的对象具有相同 objectType 的对象数量。例如,有3个objectType为323的对象; Audi、Mercedes 和 BMW,因此三行中的每一行的 groupSizeOfObjectType 列中都应该有一个 3。

objectType | object   | groupSizeOfObjectType

323          Audi       3
323          Mercedes   3
323          BMW        3
107          Boeing     2
107          Airbus     2
985          Ducati     1

使用 group bycount(*) 指令允许我计算以下内容,但各个对象行已分组为一个结果行,如下所示:

objectType | object   | groupSizeOfObjectType (for clarification, optional)

323          Audi       3
107          Boeing     2
985          Ducati     1

在结果中,我需要拥有所有对象。

我怎样才能做到这一点?

我的实际问题有点复杂。鉴于我有一个带有额外 objectKind 列的表,如下所示:

objectType | objectKind |  object

107          B             Boeing
107          B             Airbus
323          D             Audi
323          D             Mercedes
323          D             BMW
323          D             Lexus
985          B             Ducati

我想计算表示 objectType 和 objectKind 计数的列,然后首先按 objectKind 对结果行进行排序,然后按 objectTypes 排序,两者均按降序排列,产生以下结果:

objectType | objectKind |  object


323          D             Audi      
323          D             Mercedes
323          D             BMW
323          D             Lexus
107          B             Boeing
107          B             Airbus
985          B             Ducati

最佳答案

在开始对行进行排序之前,您需要知道每种类型和类型的数量。这可以通过在单独的查询中计算这些并将结果连接到原始表来实现。

  SELECT o.*
    FROM object o
    JOIN (
      SELECT objectKind, COUNT(*) count
        FROM object   
    GROUP BY objectKind
         ) ok
      ON ok.objectKind = o.objectKind
    JOIN (
      SELECT objectType, COUNT(*) count
        FROM object   
    GROUP BY objectType
         ) ot
      ON ot.objectType= o.objectType
ORDER BY ok.count DESC, ot.count DESC, o.object ASC

SQLFiddle Demo

关于mysql - SQL:按一列中相同值的数量排序,无需聚合/收缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32440782/

相关文章:

python - Turbogears2 与 MySQL 数据库不更新多线程中的表

mysql从子查询中获取列的总和,同时仍然返回所有记录

php - 数据库结构

mysql - 使用 Amazon RDS 的 DIY 分片策略

java - jooq 字符串到整数的转换

java - ORMLite - 将项目添加到表末尾

sql - Postgresql - 将列类型从 oid 更改为 bytea 并保留数据

sql - 聚合表 2 中的行以避免重复表 1 中的行

c++ - 检查数据库中的指纹

sql - SQLite 真的跨平台吗?