Oracle相关子查询、过滤结果
Oracle correlated subquery, filter results
编辑解决方案:
首先,感谢@Nick 找到您可以在下面看到的解决方案。
其次,我附加了执行查询所需的相关代码。
SELECT L.num_pedido, PR.codigo, PR.nombre, PR.precio AS "Producto más caro"
FROM lineas L, productos PR
WHERE L.producto=PR.codigo
AND (PR.precio) = (
SELECT MAX(PR2.precio)
FROM lineas L2, productos PR2
WHERE L2.producto=PR2.codigo
AND L2.num_pedido=L.num_pedido
)
ORDER BY L.num_pedido;
我对一个看似简单的练习有疑问。
我首先向您展示所涉及的 table:
练习题:"Data of the most expensive product of each order (with a correlated query)"
显然,在搜索该网站后我很快找到了解决方案,问题是我认为我仍然没有正确执行解决方案。这是我的代码:
SELECT DISTINCT L.num_pedido, PR.codigo, PR.nombre, PR.precio AS "Max. precio unidad"
FROM lineas L, productos PR
WHERE L.producto=PR.codigo
AND (precio) = (
SELECT MAX(precio)
FROM productos PR2
WHERE PR.codigo=PR2.codigo
)
ORDER BY L.num_pedido
但我仍然无法通过 "num_pedido"(订单号)对其进行过滤。结果 table 应该如下所示,省略了红色划掉的行:
表格:
CREATE TABLE PRODUCTOS (
CODIGO NUMBER(5,0) PRIMARY KEY,
NOMBRE VARCHAR2(30) NOT NULL,
PRECIO NUMBER(7,2) NOT NULL
);
CREATE TABLE LINEAS (
NUM NUMBER(2,0),
NUM_PEDIDO NUMBER(5,0),
PRODUCTO NUMBER(5,0) NOT NULL ,
CANTIDAD NUMBER(8,0) NOT NULL ,
IMPORTE NUMBER(6,2),
CONSTRAINT DETALLE_PK PRIMARY KEY (NUM, NUM_PEDIDO) ,
CONSTRAINT PEDIDO_FK FOREIGN KEY (NUM_PEDIDO)
REFERENCES PEDIDOS (NUM) ,
CONSTRAINT PRODUCTO_FK FOREIGN KEY (PRODUCTO)
REFERENCES PRODUCTOS (CODIGO)
);
数据:
INSERT INTO PRODUCTOS VALUES (10001, 'PANTALÓN', 50);
INSERT INTO PRODUCTOS VALUES (10002, 'PANTALÓN PITILLO', 60);
INSERT INTO PRODUCTOS VALUES (10003, 'PANTALÓN CAMPANA', 55);
INSERT INTO PRODUCTOS VALUES (20001, 'CAMISA M/L', 65);
INSERT INTO PRODUCTOS VALUES (20002, 'CAMISA M/C', 45);
INSERT INTO PRODUCTOS VALUES (30001, 'VESTIDO C', 80);
INSERT INTO PRODUCTOS VALUES (30002, 'VESTIDO L', 90);
INSERT INTO PRODUCTOS VALUES (40001, 'FALDA LARGA', 50);
INSERT INTO PRODUCTOS VALUES (40002, 'FALDA CORTA', 45);
INSERT INTO PRODUCTOS VALUES (40003, 'FALDA MINI', 40);
INSERT INTO LINEAS VALUES (1,1, 10001, 2, 100);
INSERT INTO LINEAS VALUES (2,1, 30001, 1, 80);
INSERT INTO LINEAS VALUES (3,1, 20001, 2, 130);
INSERT INTO LINEAS VALUES (1,2, 20001, 1, 65);
INSERT INTO LINEAS VALUES (2,2, 40003, 3, 120);
INSERT INTO LINEAS VALUES (1,3, 40002, 2, 180);
INSERT INTO LINEAS VALUES (1,4, 10001, 2, 100);
INSERT INTO LINEAS VALUES (1,5, 20002, 2, 90);
INSERT INTO LINEAS VALUES (2,5, 40002, 1, 45);
INSERT INTO LINEAS VALUES (1,6, 40002, 1, 45);
INSERT INTO LINEAS VALUES (1,7, 40002, 1, 45);
INSERT INTO LINEAS VALUES (1,8, 40002, 1, 45);
INSERT INTO LINEAS VALUES (1,9, 40003, 1, 40);
INSERT INTO LINEAS VALUES (2,9, 20002, 1, 45);
INSERT INTO LINEAS VALUES (1,10,20002, 2, 90);
我知道这可能是一个非常简单的错误,但我找不到解决方案。
感谢您的宝贵时间。
这现在有效:
SELECT A.NUM_PEDIDO, A.CODIGO, A.NOMBRE, A.PRECIO FROM (
SELECT L.NUM_PEDIDO, PR.CODIGO, PR.NOMBRE, PR.PRECIO,RANK() OVER (PARTITION BY L.NUM_PEDIDO ORDER BY PR.PRECIO DESC) RANKORDER
FROM LINEAS L INNER JOIN PRODUCTOS PR ON L.PRODUCTO =PR.CODIGO
)A WHERE RANKORDER = 1
编辑解决方案: 首先,感谢@Nick 找到您可以在下面看到的解决方案。 其次,我附加了执行查询所需的相关代码。
SELECT L.num_pedido, PR.codigo, PR.nombre, PR.precio AS "Producto más caro"
FROM lineas L, productos PR
WHERE L.producto=PR.codigo
AND (PR.precio) = (
SELECT MAX(PR2.precio)
FROM lineas L2, productos PR2
WHERE L2.producto=PR2.codigo
AND L2.num_pedido=L.num_pedido
)
ORDER BY L.num_pedido;
我对一个看似简单的练习有疑问。 我首先向您展示所涉及的 table:
练习题:"Data of the most expensive product of each order (with a correlated query)"
显然,在搜索该网站后我很快找到了解决方案,问题是我认为我仍然没有正确执行解决方案。这是我的代码:
SELECT DISTINCT L.num_pedido, PR.codigo, PR.nombre, PR.precio AS "Max. precio unidad"
FROM lineas L, productos PR
WHERE L.producto=PR.codigo
AND (precio) = (
SELECT MAX(precio)
FROM productos PR2
WHERE PR.codigo=PR2.codigo
)
ORDER BY L.num_pedido
但我仍然无法通过 "num_pedido"(订单号)对其进行过滤。结果 table 应该如下所示,省略了红色划掉的行:
表格:
CREATE TABLE PRODUCTOS (
CODIGO NUMBER(5,0) PRIMARY KEY,
NOMBRE VARCHAR2(30) NOT NULL,
PRECIO NUMBER(7,2) NOT NULL
);
CREATE TABLE LINEAS (
NUM NUMBER(2,0),
NUM_PEDIDO NUMBER(5,0),
PRODUCTO NUMBER(5,0) NOT NULL ,
CANTIDAD NUMBER(8,0) NOT NULL ,
IMPORTE NUMBER(6,2),
CONSTRAINT DETALLE_PK PRIMARY KEY (NUM, NUM_PEDIDO) ,
CONSTRAINT PEDIDO_FK FOREIGN KEY (NUM_PEDIDO)
REFERENCES PEDIDOS (NUM) ,
CONSTRAINT PRODUCTO_FK FOREIGN KEY (PRODUCTO)
REFERENCES PRODUCTOS (CODIGO)
);
数据:
INSERT INTO PRODUCTOS VALUES (10001, 'PANTALÓN', 50);
INSERT INTO PRODUCTOS VALUES (10002, 'PANTALÓN PITILLO', 60);
INSERT INTO PRODUCTOS VALUES (10003, 'PANTALÓN CAMPANA', 55);
INSERT INTO PRODUCTOS VALUES (20001, 'CAMISA M/L', 65);
INSERT INTO PRODUCTOS VALUES (20002, 'CAMISA M/C', 45);
INSERT INTO PRODUCTOS VALUES (30001, 'VESTIDO C', 80);
INSERT INTO PRODUCTOS VALUES (30002, 'VESTIDO L', 90);
INSERT INTO PRODUCTOS VALUES (40001, 'FALDA LARGA', 50);
INSERT INTO PRODUCTOS VALUES (40002, 'FALDA CORTA', 45);
INSERT INTO PRODUCTOS VALUES (40003, 'FALDA MINI', 40);
INSERT INTO LINEAS VALUES (1,1, 10001, 2, 100);
INSERT INTO LINEAS VALUES (2,1, 30001, 1, 80);
INSERT INTO LINEAS VALUES (3,1, 20001, 2, 130);
INSERT INTO LINEAS VALUES (1,2, 20001, 1, 65);
INSERT INTO LINEAS VALUES (2,2, 40003, 3, 120);
INSERT INTO LINEAS VALUES (1,3, 40002, 2, 180);
INSERT INTO LINEAS VALUES (1,4, 10001, 2, 100);
INSERT INTO LINEAS VALUES (1,5, 20002, 2, 90);
INSERT INTO LINEAS VALUES (2,5, 40002, 1, 45);
INSERT INTO LINEAS VALUES (1,6, 40002, 1, 45);
INSERT INTO LINEAS VALUES (1,7, 40002, 1, 45);
INSERT INTO LINEAS VALUES (1,8, 40002, 1, 45);
INSERT INTO LINEAS VALUES (1,9, 40003, 1, 40);
INSERT INTO LINEAS VALUES (2,9, 20002, 1, 45);
INSERT INTO LINEAS VALUES (1,10,20002, 2, 90);
我知道这可能是一个非常简单的错误,但我找不到解决方案。
感谢您的宝贵时间。
这现在有效:
SELECT A.NUM_PEDIDO, A.CODIGO, A.NOMBRE, A.PRECIO FROM (
SELECT L.NUM_PEDIDO, PR.CODIGO, PR.NOMBRE, PR.PRECIO,RANK() OVER (PARTITION BY L.NUM_PEDIDO ORDER BY PR.PRECIO DESC) RANKORDER
FROM LINEAS L INNER JOIN PRODUCTOS PR ON L.PRODUCTO =PR.CODIGO
)A WHERE RANKORDER = 1