gpt4 book ai didi

sql - 在一个语句中为一列选择两组不同的行?

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

我有一个包含 2 列的表格:
名称, 百分比

我在该表中有 100 行,并且想要进行查询以选择具有最小百分比值的 5 行和具有最大百分比值的 5 行值(value)。

通常我会使用 limitoffset 来执行此操作,但它只会选择我寻求的结果组之一。我想知道是否有一种方法可以同时选择两者。

我一直在寻找解决方案,我想到了FETCH,但我并没有真正成功地使用它。

最佳答案

UNION ALL

(
SELECT name, percentage
FROM tbl
ORDER BY percentage
LIMIT 5
)
UNION ALL
(
SELECT name, percentage
FROM tbl
ORDER BY percentage DESC
LIMIT 5
);

您需要括号,以将ORDER BYLIMIT 应用于 的嵌套SELECT 语句UNION查询。我引用 the manual here :

ORDER BY and LIMIT can be attached to a subexpression if it is enclosed in parentheses. Without parentheses, these clauses will be taken to apply to the result of the UNION, not to its right-hand input expression.

UNION(没有 ALL)将删除结果中的重复项。如果您不希望被骗,那将是无用的努力。

子查询 row_number()

SELECT name, percentage
FROM (
SELECT *
, row_number() OVER (ORDER BY percentage) AS rn_min
, row_number() OVER (ORDER BY percentage DESC) AS rn_max
FROM tbl
) x
WHERE rn_min < 6
OR rn_max < 6;

这会像 UNION 那样折叠重复项。性能将相似,可能比第一个慢一点。

无论哪种方式,按附加列排序以以受控方式打破平局。照原样,您可以从共享相同 percentage 的对等组中获取任意行。

关于sql - 在一个语句中为一列选择两组不同的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13431833/

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