【发布时间】:2019-07-22 12:04:52
【问题描述】:
我有一个如下的数据库结构:
id value category
1 val1 6
2 val2 6
3 val3 5
4 val4 7
5 val5 8
5 val5 5
我需要根据排序后的类别数显示结果。假设如果类别的值为 2,那么结果应该是:
id value category
3 val3 5
5 val5 5
1 val1 6
2 val2 6
这是一个动态表,一段时间后可能会删除类别 6 的记录,现在如果类别为 2,我们需要显示:
id value category
3 val3 5
5 val5 5
4 val4 7
经过研究,我发现一种解决方案是使用 rownum:
SELECT * FROM TABLE WHERE CATEGORY IN
(SELECT CATEGORY FROM
(SELECT ROWNUM ROWNUMBER, CATEGORY FROM
(SELECT CATEGORY FROM TABLE GROUP BY CATEGORY ORDER BY CATEGORY)) WHERE ROWNUMBER >= 2)
但我知道这不是很有效。有没有更优化的方法?
【问题讨论】:
-
"假设如果类别的值为 2,那么结果应该是......" 为什么?没有 2 的类别,2 与获得 5 和 6 的类别有何关系?还是与类别中的行数有关?或者获取多个类别?为什么如果删除了第 6 类,你应该返回第 7 类而不是第 8 类?您确定您发布的示例代码给出了您期望的结果,因为它没有给出您发布的任何一个输出吗? (db<>fiddle)