我有一个对象表及其类型,如下所示:
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 by
和 count(*)
指令允许我计算以下内容,但各个对象行已分组为一个结果行,如下所示:
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
关于mysql - SQL:按一列中相同值的数量排序,无需聚合/收缩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32440782/