gpt4 book ai didi

MySQL:ORDER BY + GROUP BY 自定义顺序

转载 作者:行者123 更新时间:2023-11-29 03:10:25 24 4
gpt4 key购买 nike

我有一个关于 MySQL 的有点复杂的问题。这是我的表:

keyword   args     title    namespace_id      ratio
en 1 A 23 0.5
en 1 B 89 0.6
en 0 C 89 0.4
foo 1 Foo 23 0.7
bar 1 Bar 89 0.3

我想要一个没有重复(关键字,参数)的所有行的列表。如果有重复项,则应按我提供的 namespace_ids 的顺序选择所选行。剩下的行应按比例排序。

namespace_id 顺序为 23,89,x,y 的示例结果:

keyword   args     title    namespace_id      ratio
foo 1 Foo 23 0.7
en 1 A 23 0.5
en 0 C 89 0.4
bar 1 Bar 89 0.3

命名空间顺序为 89,23,x,y 的示例结果:

keyword   args     title    namespace_id      ratio
foo 1 Foo 23 0.7
en 1 B 89 0.6
en 0 C 89 0.4
bar 1 Bar 89 0.3

有什么方法可以直接在 MySQL 中执行此操作?我查看了 GROUP BY、ORDER BY,甚至注意到 GROUP_CONCAT() 函数,但我没有设法将它们正确地组合在一起。我想要以某种方式做的声明是:

  SELECT keyword, args, title, namespace_id, ratio 
FROM tbl
GROUP BY keyword, args
ORDER BY ratio DESC;

但是现在不知道怎么把namespace_id的顺序带进来。

我发现了类似这样的问题: MySQL: "order by" inside of "group by"那里的答案接近我想要的,但是,我的 namespace_id 顺序是变化的,不能由 MAX() 函数计算。

编辑:这里的挑战是告诉GROUP BY 选择哪一行。普通的 ORDER BY 显然没有,它只使用 GROUP BY 的输出。

最佳答案

尝试使用 FIELD() 和子查询:

SELECT t1.keyword, t1.args, t1.title, t1.namespace_id, t1.ratio
FROM tbl t1, (SELECT keyword, args, MIN(FIELD(namespace_id, 23, 89))
minfield FROM tbl GROUP BY keyword, args) t2
WHERE t1.keyword = t2.keyword AND t1.args = t2.args AND
FIELD(t1.namespace_id, 23, 89) = t2.minfield
ORDER BY ratio DESC;

或自外连接:

SELECT t1.keyword, t1.args, t1.title, t1.namespace_id, t1.ratio
FROM tbl t1
LEFT OUTER JOIN tbl t2 ON
t1.keyword = t2.keyword AND
t1.args = t2.args AND
FIELD(t1.namespace_id, 23, 89) < FIELD(t2.namespace_id, 23, 89)
WHERE t2.keyword IS NULL AND t2.args IS NULL
ORDER BY t1.ratio DESC;

编辑:也可能值得看看一些支持 OLAP 操作的(商业)DBMS(如果您能够选择并且正在处理大型数据集)。对于 Georg 的情况,我认为 OVER 和 PARTITION BY 关键字会有所帮助:http://publib.boulder.ibm.com/infocenter/rbhelp/v6r3/topic/com.ibm.redbrick.doc6.3/sqlrg/sqlrg36.htm#sii06377181

关于MySQL:ORDER BY + GROUP BY 自定义顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9417785/

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