[英]Select Min value row in oracle
我要選擇具有min price
的整row
。 因為我需要更多列的數據才能顯示具有最低價格的數據。 像下面這樣。
SELECT ep.*, min(ep.price) minprice FROM Equip_price ep;
我該如何使用Oracle DB?
我實際上是想通過equipment_id獲得equipment_price。 以下是樣本數據。
pid equipmentID price
1 1 50
2 2 20
3 1 100
4 1 20
5 3 100
6 3 10
7 1 20
我想要這樣的結果。 (按設備ID划分的最低價格)
id equipmentID price
4 1 20
2 2 20
6 3 10
更新特定答案:
SQL> WITH Equip_price AS
2 ( SELECT 1 pid, 1 equipmentID, 50 price FROM dual
3 UNION ALL
4 SELECT 2 , 2 , 20 FROM dual
5 UNION ALL
6 SELECT 3 , 1 , 100 FROM dual
7 UNION ALL
8 SELECT 4 , 1 , 20 FROM dual
9 UNION ALL
10 SELECT 5 , 3 , 100 FROM dual
11 UNION ALL
12 SELECT 6 , 3 , 10 FROM dual
13 UNION ALL
14 SELECT 7 , 1 , 20 FROM dual
15 )
16 SELECT ep.pid,
17 ep.equipmentID,
18 ep.price
19 FROM (
20 SELECT ep.*,
21 row_number() OVER(PARTITION BY ep.equipmentID ORDER BY ep.price)
22 AS row_identifier
23 FROM Equip_price ep
24 ) ep
25 WHERE ep.row_identifier = 1;
PID EQUIPMENTID PRICE
---------- ----------- ----------
4 1 20
2 2 20
6 3 10
SQL>
例如,要獲取每個部門中最低工資的員工詳細信息,
SQL> WITH DATA AS
2 ( SELECT deptno, MIN(sal) min_sal FROM emp GROUP BY deptno
3 )
4 SELECT * FROM emp A, DATA b
5 WHERE A.deptno = b.deptno
6 AND A.sal = b.min_sal
7 /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO DEPTNO MIN_SAL
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20 20 800
7900 JAMES CLERK 7698 03-DEC-81 950 30 30 950
7934 MILLER CLERK 7782 23-JAN-82 1300 10 10 1300
您還可以使用ROW_NUMBER之類的分析功能。
SQL> WITH DATA AS
2 ( SELECT t.*, row_number() OVER(ORDER BY sal) rn FROM emp t
3 )
4 SELECT * FROM emp WHERE empno =
5 (SELECT empno FROM data WHERE rn = 1
6 )
7 /
EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
7369 SMITH CLERK 7902 17-DEC-80 800 20
SQL>
沒有CTE:
SELECT E.*
FROM Equip_price E
INNER JOIN (
SELECT ep.equipmentID, min(ep.price) minprice
FROM Equip_price ep
GROUP BY ep.equipmentID
) aggr
ON (E.equipmentID = aggr.equipmentID AND E.price = aggr.minprice)
要么
SELECT ep.id,
ep.equipmentID,
ep.price
FROM (
SELECT ep.*,
row_number() OVER(PARTITION BY ep.equipmentID ORDER BY ep.price)
AS row_identifier
FROM Equip_price ep
) ep
WHERE ep.row_identifier = 1;
嘗試這個:
select min(x.pid) as min_pid, x.equipmentID, y.min_price
from Equip_price x
inner join
(
select equipmentID, min(price) as min_price
from Equip_price
group by equipmentID
) y on y.equipmentID = x.equipmentID and y.min_price = x.price
group by x.equipmentID, y.min_price
order by 2;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.