有如下一张表t1 CREATE TABLE t1(商品 VARCHAR(20), 日期 DATE, 单价 NUMBER, 数量 NUMBER) INSERT INTO t1 VALUES('桌子',DATE '2016-01-01',100,1); INSERT INTO t1 VALUES('椅子',DATE '2016-01-01',50,4); INSERT INTO t1 VALUES('桌子',DATE '2016-01-02',100,2); INSERT INTO t1 VALUES('桌子',DATE '2016-01-02',105,1); 想查询每种商品最近一天的日平均单价,预计结果如下表t2所示: CREATE TABLE t2(商品 VARCHAR(20), 日期 DATE, 平均单价 NUMBER ) INSERT INTO t2 VALUES('桌子',DATE '2016-01-01',50); INSERT INTO t2 VALUES('椅子',DATE '2016-01-02',101.67);
时间: 2024-02-14 19:19:04 浏览: 34
可以使用以下 SQL 语句实现该查询:
```
SELECT 商品, 日期, AVG(单价) AS 平均单价
FROM t1
WHERE (商品, 日期) IN (
SELECT 商品, MAX(日期)
FROM t1
GROUP BY 商品
)
GROUP BY 商品, 日期
ORDER BY 商品, 日期;
```
该语句先在子查询中找到每个商品的最近日期,然后在外部查询中对每个商品和日期计算平均单价,并将结果插入到 t2 表中。
相关问题
已知表a 如下: CREATE TABLE a (ID NUMBER,value1 VARCHAR(20),value2 VARCHAR(20)); INSERT INTO a VALUES (1,'A1','B1'); INSERT INTO a VALUES (1,'A2','B2'); INSERT INTO a VALUES (2,'A1','B2'); INSERT INTO a VALUES (2,'A2',NULL); 求如何用sql转换成表b: CREATE TABLE b (ID NUMBER,value1 VARCHAR(20)); INSERT INTO a VALUES (1,'A1A2'); INSERT INTO a VALUES (1,'B1B2'); INSERT INTO a VALUES (2,'A1A2'); INSERT INTO a VALUES (2,'B2');
可以使用 GROUP BY 和 CONCAT 函数来将表 a 转换成表 b,具体的 SQL 语句如下:
```
CREATE TABLE b (ID NUMBER,value1 VARCHAR(20));
INSERT INTO b
SELECT ID, CONCAT(MAX(value1), MIN(value1)) AS value1
FROM a
GROUP BY ID;
INSERT INTO b
SELECT ID, CONCAT(MAX(value2), MIN(value2)) AS value1
FROM a
GROUP BY ID
HAVING COUNT(*) = 2 AND COUNT(value2) = 2;
```
首先创建表 b,然后使用 SELECT 语句查询表 a 中的 ID 和 value1 列并使用 GROUP BY 子句按 ID 分组。使用 CONCAT 函数将每个组中的 value1 列连接成一个字符串,其中 MAX 函数返回组中 value1 列的最大值,MIN 函数返回组中 value1 列的最小值。将结果插入到表 b 中。
接下来再次使用 SELECT 语句查询表 a 中的 ID 和 value2 列,并使用 GROUP BY 子句按 ID 分组。使用 CONCAT 函数将每个组中的 value2 列连接成一个字符串,其中 MAX 函数返回组中 value2 列的最大值,MIN 函数返回组中 value2 列的最小值。在 HAVING 子句中添加条件,只有当每个组中的行数为 2 且 value2 列的非空行数为 2 时,才将结果插入到表 b 中。
最终,表 b 中的数据就与要求的结果一致。
create table stu2( sno number, sname varchar2(20), deptid number, startdate date); sno:自动生成 前4位入学年份第5位院系编号,后4位顺序号 insert into stu2 values(null,'a',1,to_date('2020-9-1','yyyy-mm-dd'));的建表语句
以下是您提供的 SQL 语句的建表语句:
```
CREATE TABLE stu2 (
sno NUMBER,
sname VARCHAR2(20),
deptid NUMBER,
startdate DATE
);
```
这个 SQL 语句用于创建一个名为 stu2 的表,其中包含四个字段:sno、sname、deptid 和 startdate。它们的数据类型分别为数字类型、字符串类型、数字类型和日期类型。
其中,sno 字段是一个自动生成的数字类型字段,它的前四位表示入学年份,第五位表示院系编号,后四位表示顺序号。如果您想要实现自动生成,可以使用触发器或序列来实现。
另外,该 SQL 语句并没有向 stu2 表中插入任何数据,如果您想要向表中插入数据,请使用 INSERT INTO 语句。例如:
```
INSERT INTO stu2 VALUES (null, 'a', 1, to_date('2020-9-1','yyyy-mm-dd'));
```
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)