sql练习

本文通过一系列SQL实例,探讨如何在SQL Server中进行数据去重、查询条件筛选、数据组合、聚合操作等实战技巧,包括使用ROW_NUMBER()函数去除重复记录、查询每个学生所有课程平均分大于80的情况、删除重复数据以及展示所有比赛组合等复杂查询。
摘要由CSDN通过智能技术生成

sql servser 记录

1.只有一个数据相同,其他都不相同去重
create table cst (gq nvarchar(100),bg nvarchar(100),rs nvarchar(100))

insert into cst values(‘fr’,‘z’,‘b’),(‘lr’,‘ss’,‘cc’),(‘fr’,‘vv’,‘44’)
在这里插入图片描述
写法:select px.* from
(select cst.*,row_number() over (partition by gq ORDER BY gq desc ) px from cst ) px
where px=1
在这里插入图片描述

  1. 用一条SQL 语句 查询出每门课都大于80 分的学生姓名

name course grade
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 语文 81
王五 数学 100
王五 英语 90

select name from name_zheng group by name having min(grade)>80

  1. 现有学生表如下:
    自动编号 学号 姓名 课程编号 课程名称 分数
    1 2005001 张三 0001 数学 69
    2 2005002 李四 0001 数学 89
    3 2005001 张三 0001 数学 69
    删除除了自动编号不同, 其他都相同的学生冗余信息

create table xs_zheng (serial nvarchar(100),student nvarchar(100),name nvarchar(100),course_id nvarchar(100),course_name nvarchar(100),grade_digit int)

insert into xs_zheng values(‘6’,‘2005001’, ‘张三’, ‘0001’, ‘数学’, 69 ),(‘2’,‘2005002’, ‘李四’, ‘0001’, ‘数学’, 89 ),(‘3’,‘2005001’, ‘张三’, ‘0001’, ‘数学’, 69 )

select max(serial) from xs_zheng group by student,name,course_id,course_name,grade_digit

delete from xs_zheng where serial not in (

select max(serial) from xs_zheng group by student,name,course_id,course_name,grade_digit
)

  1. 一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球队,现在四个球队进行比赛,用一条sql 语句显示所有可能的比赛组合

select * from team a,team b ORDER BY a.name,b.name

  1. 怎么把这样一个数据表
    year month amount
    1991 1 1.1
    1991 2 1.2
    1991 3 1.3
    1991 4 1.4
    1992 1 2.1
    1992 2 2.2
    1992 3 2.3
    1992 4 2.4
    查成这样一个结果?
    year m1 m2 m3 m4
    1991 1.1 1.2 1.3 1.4
    1992 2.1 2.2 2.3 2.4

select year,
(select amount from test_zheng where month=‘1’ and year=a.year) as m1,
(select amount from test_zheng where month=‘2’ and year=a.year) as m2,
(select amount from test_zheng where month=‘3’ and year=a.year) as m3,
(select amount from test_zheng where month=‘4’ and year=a.year) as m4
from test_zheng a GROUP BY year

  1. 有表A,结构如下:
    p_ID p_Num s_id
    1 10 01
    1 12 02
    2 8 01
    3 11 01
    3 8 03
    其中:p_ID为产品ID,p_Num为产品库存量,s_id为仓库ID。
    请用SQL语句实现将上表中的数据合并,合并后的数据为:
    p_ID s1_id s2_id s3_id
    1 10 12 0
    2 8 0 0
    3 11 0 8
    其中:s1_id为仓库1的库存量,s2_id为仓库2的库存量,s3_id为仓库3的库存量。如果该产品在某仓库中无库存量,那么就是0代替。

select p_id,
(select P_Num from A where s_id=1 and p_id=1) as s1_id,
(select P_Num from A where s_id=2 and p_id=2) as s2_id,
(select P_Num from A where s_id=3 and p_id=3) as s3_id
from A group by p_id

select p_id,P_num,s_id from a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值