记录在Oracle中查询按主表分组的记录(oracle中按主表查询)

在Oracle中查询按主表分组的记录

当我们需要查询主表下的子表记录时,往往需要按照主表的某个字段进行分组查询。在Oracle中,我们可以使用GROUP BY语句来实现按主表分组查询操作。

GROUP BY语句的基本语法如下:

SELECT

column_name(s)

FROM

table_name

WHERE

condition

GROUP BY

column_name(s)

HAVING

condition;

其中,column_name(s)表示需要查询的字段;table_name为查询的表名;condition为查询条件;column_name(s)为分组的字段;HAVING子句为分组后的过滤条件。

下面以一个订单订单详情为例来演示如何在Oracle中进行按主表分组查询。

我们需要建立两个表,分别为:

CREATE TABLE orders (

order_id NUMBER(5) PRIMARY KEY,

customer_name VARCHAR2(50) NOT NULL,

order_date DATE NOT NULL

);

CREATE TABLE order_detls (

detl_id NUMBER(5) PRIMARY KEY,

order_id NUMBER(5) NOT NULL,

product_name VARCHAR2(50) NOT NULL,

unit_price NUMBER(10,2) NOT NULL,

quantity NUMBER(5) NOT NULL,

FOREIGN KEY (order_id) REFERENCES orders(order_id)

);

在orders表中,我们记录了订单id,客户姓名和下单时间;在order_detls表中,我们记录了订单详情id,订单id,商品名称,商品单价和商品数量,并且通过外键约束将两个表关联起来。

接下来,我们往两个表中插入测试数据:

INSERT INTO orders VALUES (1, ‘张三’, TO_DATE(‘2022-01-01’, ‘YYYY-MM-DD’));

INSERT INTO orders VALUES (2, ‘李四’, TO_DATE(‘2022-01-02’, ‘YYYY-MM-DD’));

INSERT INTO orders VALUES (3, ‘王五’, TO_DATE(‘2022-01-03’, ‘YYYY-MM-DD’));

INSERT INTO order_detls VALUES (1, 1, ‘商品A’, 10.00, 2);

INSERT INTO order_detls VALUES (2, 1, ‘商品B’, 20.00, 3);

INSERT INTO order_detls VALUES (3, 2, ‘商品C’, 30.00, 4);

INSERT INTO order_detls VALUES (4, 3, ‘商品D’, 40.00, 5);

INSERT INTO order_detls VALUES (5, 3, ‘商品E’, 50.00, 6);

这里我们插入了3个订单和5个订单详情记录,并且针对每个订单插入了不同的订单详情。

接着,我们可以使用GROUP BY语句来查询每个订单的总金额:

SELECT

o.order_id,

o.customer_name,

sum(od.unit_price * od.quantity) AS total_amount

FROM

orders o

JOIN order_detls od ON o.order_id = od.order_id

GROUP BY

o.order_id,

o.customer_name;

这里我们使用了JOIN语句将两个表关联起来,并使用GROUP BY语句按照订单id和客户姓名进行分组查询。最后我们使用sum函数计算每个订单的总金额,并将结果显示出来:

ORDER_ID CUSTOMER_NAME TOTAL_AMOUNT

1 张三 70.00

2 李四 120.00

3 王五 490.00

可以看到,我们成功地查询到了每个订单的总金额,并且按照订单id和客户姓名进行了分组。

通过上面的例子,我们可以发现在Oracle中进行按主表分组查询操作非常简单。如果我们需要查询某个主表下的所有子表记录,并且需要按照主表的某个字段进行分组,那么我们可以使用GROUP BY语句来实现。

参考代码:

CREATE TABLE orders (

order_id NUMBER(5) PRIMARY KEY,

customer_name VARCHAR2(50) NOT NULL,

order_date DATE NOT NULL

);

CREATE TABLE order_detls (

detl_id NUMBER(5) PRIMARY KEY,

order_id NUMBER(5) NOT NULL,

product_name VARCHAR2(50) NOT NULL,

unit_price NUMBER(10,2) NOT NULL,

quantity NUMBER(5) NOT NULL,

FOREIGN KEY (order_id) REFERENCES orders(order_id)

);

INSERT INTO orders VALUES (1, ‘张三’, TO_DATE(‘2022-01-01’, ‘YYYY-MM-DD’));

INSERT INTO orders VALUES (2, ‘李四’, TO_DATE(‘2022-01-02’, ‘YYYY-MM-DD’));

INSERT INTO orders VALUES (3, ‘王五’, TO_DATE(‘2022-01-03’, ‘YYYY-MM-DD’));

INSERT INTO order_detls VALUES (1, 1, ‘商品A’, 10.00, 2);

INSERT INTO order_detls VALUES (2, 1, ‘商品B’, 20.00, 3);

INSERT INTO order_detls VALUES (3, 2, ‘商品C’, 30.00, 4);

INSERT INTO order_detls VALUES (4, 3, ‘商品D’, 40.00, 5);

INSERT INTO order_detls VALUES (5, 3, ‘商品E’, 50.00, 6);

SELECT

o.order_id,

o.customer_name,

sum(od.unit_price * od.quantity) AS total_amount

FROM

orders o

JOIN order_detls od ON o.order_id = od.order_id

GROUP BY

o.order_id,

o.customer_name;


数据运维技术 » 记录在Oracle中查询按主表分组的记录(oracle中按主表查询)