Я хочу выделить весь row
, в котором есть min price
. Потому что мне нужны дополнительные данные столбца для отображения с минимальной ценой. Что-то вроде ниже.
SELECT ep.*, min(ep.price) minprice FROM Equip_price ep;
Как я могу завершить работу с Oracle DB?
Обновить
Я действительно хочу получить equipment_price по equipment_id. Ниже приведены образцы данных.
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 equipmentID price
4 1 20
2 2 20
6 3 10
2 ответа
Обновить Конкретный ответ:
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;
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.