gpt4 book ai didi

php - MySQL 中的排序/

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

我在尝试排序时试图找出一些逻辑时遇到问题。甚至回到 Excel 来计算简单的逻辑。

What I have is :-
ColA ColB
100022 33
100022 36
100024 28
100024 32
100024 41
100024 52
100026 38
100038 28
100038 42
100038 48
100038 59

我想要做的是按 B 列(从高到低)排序,但我不希望 A 列彼此相邻具有相同的值。对上面的排序将有 33 和 36(100022)彼此相邻(以及 42 和 48),100038 彼此相邻。只要 B 列尽可能从高到低排序,并且 A 列的值永远不会彼此相邻(除非绝对必要),我就很高兴。

理想情况下,我追求的是这样的逻辑..

100024  28
100038 28
100022 33
100024 32
100022 36
100026 38
100038 42
100024 41
100038 48
100024 52
100038 59

任何帮助或想法将不胜感激。

谢谢布拉德

最佳答案

如果您想强制 ColA 中的两个值不相邻出现,则一种选择是为给定 ColA block 中的每个值分配行号,然后排序以确保不会出现相邻值。

SET @row_number = 0;
SET @ColA = NULL;

SELECT t.ColA, t.ColB
FROM
(
SELECT
@row_number:=CASE WHEN @ColA = ColA THEN @row_number + 1 ELSE 1 END AS rn,
@ColA:=ColA AS ColA,
ColB
FROM
yourTable
ORDER BY ColA, ColB DESC
) t
ORDER BY t.rn, t.ColB DESC

您在问题中提到希望 ColB 从最高到最低排序,我已经做到了。如果您想要升序排序,只需从上面的查询中删除 DESC 即可。

输出:

enter image description here

此处演示:

Rextester

关于php - MySQL 中的排序/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43627344/

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