sql分组查询问题
SQL 问题 查询 分组
2023-06-13 09:14:15 时间
情景一:
表中数据
namescore
aaa11
aaa19
bbb12
bbb18
ccc19
ddd21
期望查询结果如下
namescore
aaa30
bbb30
ccc19
ddd21
复制代码代码如下:
表中数据
namescore
aaa11
aaa19
bbb12
bbb18
ccc19
ddd21
期望查询结果如下
namescore
aaa30
bbb30
ccc19
ddd21
---检查表是否存在
ifexists(select*fromsysobjectswherename="testSum")
droptabletestSum
go
---创建表
createtabletestSum
(
tidintprimarykeyidentity(1,1),
tnamevarchar(30)null,
tscorintnull
)
go
insertintotestSum(tname,tscor)
select"aaa",11
unionall
select"aaa",19
unionall
select"bbb",12
unionall
select"bbb",18
unionall
select"ccc",19
unionall
select"ddd",21
---查询语句
selecttname,sum(tscor)fromtestSumgroupbytname
---只查询tscor总和为30的
selecttname,sum(tscor)fromtestSumgroupbytnamehavingsum(tscor)=30
情景二:
姓名科目分数
张三语文30
张三数学50
张三英语70
李四语文50
李四数学80
李四英语90
期望查询结果:
姓名语文数学英语
张三305070
李四508090
---检查表是否存在
ifexists(select*fromsysobjectswherename="testScore")
droptabletestScore
go
---创建表
createtabletestScore
(
tidintprimarykeyidentity(1,1),
tnamevarchar(30)null,
ttypevarchar(10)null,
tscorintnull
)
go
---插入数据
insertintotestScorevalues("张三","语文",90)
insertintotestScorevalues("张三","数学",20)
insertintotestScorevalues("张三","英语",50)
insertintotestScorevalues("李四","语文",30)
insertintotestScorevalues("李四","数学",47)
insertintotestScorevalues("李四","英语",78)
---查询
selecttnameas"姓名",
max(casettypewhen"语文"thentscorelse0end)"语文",
max(casettypewhen"数学"thentscorelse0end)"数学",
max(casettypewhen"英语"thentscorelse0end)"英语"
fromtestScore
groupbytname
情景三:
表:table1
字段:id,name
内容:
----------------
1,aaa
1,bbb
2,ccc
2,ddd
3,eee
3,fff
--------------
希望结果:
---------------------
1aaabbb[aaabbb之间半角空格区分,以下类似]
2cccddd
3eeefff
fexists(select*fromsysobjectswherename="test1")
droptabletest1
go
createtabletest1
(
tidintprimarykeyidentity(1,1),
tnumintnull,
tnamevarchar(30)null
)
go
insertintotest1values(1,"aa")
insertintotest1values(1,"bb")
insertintotest1values(2,"cc")
insertintotest1values(2,"dd")
insertintotest1values(3,"ee")
insertintotest1values(3,"ff")
SELECT*FROM(SELECTDISTINCTtnumFROMtest1
)A
OUTERAPPLY(
SELECTtname=STUFF(REPLACE(REPLACE(
(
SELECTtnameFROMtest1N
WHEREtnum=A.tnum
FORXMLAUTO
),"<Ntname="",""),""/>",""),1,1,"")
)N
情景四:
我需要将表tb中的数据select出来,得到下面第二个表的数据,如何写select语句?
表tb
idaflagclass
----------+---------+--------+---------
121A
221A
341A
452A
532A
641A
721A
832A
942A
1053A
1151B
1221B
1331B
1441B
1523B
1673B
1732B
1841B
1951B
2022B
2111B
2211C
2323C
2463C
2532C
...
需要选取出如下的表,按class列进行分组,a1,a2,a3字段分别为flag=1、2、3时tb表中a字段的求和
选取后
a1a2a3class
-----------+------------+-----------------+--------------
sum(a)sum(a)sum(a)A
sum(a)sum(a)sum(a)B
sum(a)sum(a)sum(a)C
sum(a)sum(a)sum(a)D
sum(a)sum(a)sum(a)E
sum(a)sum(a)sum(a)F
sum(a)sum(a)sum(a)G
---检查表是否存在
ifexists(select*fromsysobjectswherename="testFlag")
droptabletestFlag
go
---创建表
createtabletestFlag
(
tidintprimarykeyidentity(1,1),
tnamevarchar(30)null,
tflagintnull,
tscorintnull
)
go
---插入数据
insertintotestFlag(tname,tflag,tscor)
select"aaa",1,11
unionall
select"aaa",2,19
unionall
select"aaa",3,12
unionall
select"aaa",1,18
unionall
select"aaa",2,19
unionall
select"aaa",3,21
unionall
select"bbb",1,11
unionall
select"bbb",2,19
unionall
select"bbb",3,12
unionall
select"bbb",1,18
unionall
select"bbb",2,19
unionall
select"bbb",3,21
----查询语句
selectdistincttname,(selectsum(tscor)fromtestFlagwheretflag=1andtestFlag.tname=t.tname)as"flag1",(selectsum(tscor)fromtestFlagwheretflag=2andtestFlag.tname=t.tname)as"flag2",(selectsum(tscor)fromtestFlagwheretflag=3andtestFlag.tname=t.tname)as"flag3"fromtestFlagtgroupbytname,tflag
相关文章
- Flink SQL 客户端查询Hive配置及问题解决
- sql格式化工具-SQL Pretty Printer
- SQL开发知识:sql注入过程详解
- MySQL分页查询:实现快速简单的SQL语句(mysql分页查询sql语句)
- Oracle分页查询实战: 构建有效的SQL语句(oracle分页sql语句)
- JSP JSTL <sql:query>标签:通过SQL语句查询
- 文件Linux快速导入SQL文件的方法(linux导入sql)
- 标题:使用Oracle 查询 SQL 语句(oracle查sql)
- 用Oracle动态SQL轻松解决复杂问题(oracle动态sql)
- 处理Oracle批量SQL处理:加快数据处理速度(oracle批量sql)
- MySQL存储SQL语句,轻松和高效!(mysql存储sql语句)
- MySQL中快速实现递归查询的SQL示例(mysql递归查询sql)
- 深入浅出:使用Redis替代SQL查询(redis实现sql查询)
- Oracle SQL:如何避免并发问题(oraclesql并发)
- Oracle SQL跟踪神器,轻松定位SQL问题(oracle跟踪sql工具)
- MySQL操作如何使用SQL窗口进行数据查询和修改(mysql 中sql窗口)
- 利用SQL查询Redis中的数据(用sql查询redis)
- 利用SQL调用Redis,达到更高的效率(sql调用redis)
- MySQL查询父子级关系的SQL语句(mysql 上下级sql)
- 化分析利用Oracle SQL进行量化分析(oracle sql?量)
- 使用Oracle SQL实现数据表查询(oracle sql查表)
- 使用Oracle SQL处理文本数据的方法(oracle sql文本)
- Oracle SQL传参精准实现数据查询(oracle sql传参)
- SQL查询分析中使用net命令问题
- oracle—SQL技巧之(一)连续记录查询sql案例测试
- 深入sql数据连接时的一些问题分析