zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

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

Oracle 查询 记录 分组 主表
2023-06-13 09:12:06 时间

在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;


我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题

本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 记录在Oracle中查询按主表分组的记录(oracle中按主表查询)