gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 07:31:40 27 4
gpt4 key购买 nike

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

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com