我希望在Oracle中,而不是在PL/SQL中,在同一个查询中显示前5名销售和最后5名销售。
发布于 2016-03-01 03:52:31
根据您的问题,您可能需要以下输出。
SQL>DESC tbl_sales
Name Null? Type
----------------------------------------- -------- ----------------------------
SALES NUMBER
SQL> SELECT * FROM tbl_sales;
SALES
----------
1
2
4
3
5
6
6 rows selected.
SQL> WITH t1 AS (
select sales, row_number() over (order by sales desc) rn
from tbl_sales
),
t2 AS (
select sales,row_number() over (order by sales asc) rn
from tbl_sales
)
select t1.sales as "Top 5", t2.sales as "Min 5"
from t1 join t2 on t1.rn = t2.rn where t1.rn<=5;
Top 5 Min 5
---------- ----------
6 1
5 2
4 3
3 4
2 5发布于 2016-07-01 02:56:47
我用PostgreSQL回答了这个问题,但原则应该是一样的。没有必要用CTE来解决这个问题。
首先,我为100个字段生成了一个具有随机值的示例表。
CREATE TABLE sales AS
SELECT s,
trunc(random() * 100000 + 1) AS sales_amount,
random_string(10) AS vendor,
trunc(random() * 100 + 1) AS vendor_rating
FROM generate_series(1, 100) s;生成表单的100条记录。
"s"; "sales_amount"; "vendor"; "vendor_rating"
---- --------------- --------------- ---------------
1; 98274; "ULbPPdUTRR"; 59于是,我运行了这个查询
(SELECT *, 'Top 10' FROM sales
ORDER BY sales_amount DESC
LIMIT 5)
UNION
(SELECT *, 'Bottom 10' FROM sales
ORDER BY sales_amount ASC
LIMIT 5)
ORDER BY sales_amount DESC;这提供了所需的结果,没有CTE。例如,这使得它可以移植到MySQL。注意字符串'Top 10‘和’底部10‘的用法--这个小“技巧”使得识别哪条记录属于哪个类别变得很容易。
https://dba.stackexchange.com/questions/130855
复制相似问题