sql 分组查询问题

情景一:

表中数据

name score

aaa 11

aaa 19

bbb 12

bbb 18

ccc 19

ddd 21

期望查询结果如下

name score

aaa 30

bbb 30

ccc 19

ddd 21

复制代码 代码如下:

---检查表是否存在

if exists(select * from sysobjects where name='testSum')

drop table testSum

go

---创建表

create table testSum

(

tid int primary key identity(1,1),

tname varchar(30) null,

tscor int null

)

go

insert into testSum (tname,tscor)

select 'aaa',11

union all

select 'aaa',19

union all

select 'bbb',12

union all

select 'bbb',18

union all

select 'ccc',19

union all

select 'ddd',21

---查询语句

select tname ,sum(tscor) from testSum group by tname

---只查询tscor总和为30的

select tname ,sum(tscor) from testSum group by tname having sum(tscor)=30

情景二:

姓名 科目 分数

张三 语文 30

张三 数学 50

张三 英语 70

李四 语文 50

李四 数学 80

李四 英语 90

期望查询结果:

姓名 语文 数学 英语

张三 30 50 70

李四 50 80 90

复制代码 代码如下:

---检查表是否存在

if exists(select * from sysobjects where name='testScore')

drop table testScore

go

---创建表

create table testScore

(

tid int primary key identity(1,1),

tname varchar(30) null,

ttype varchar(10) null,

tscor int null

)

go

---插入数据

insert into testScore values ('张三','语文',90)

insert into testScore values ('张三','数学',20)

insert into testScore values ('张三','英语',50)

insert into testScore values ('李四','语文',30)

insert into testScore values ('李四','数学',47)

insert into testScore values ('李四','英语',78)

---查询

select tname as '姓名' ,

max(case ttype when '语文' then tscor else 0 end) '语文',

max(case ttype when '数学' then tscor else 0 end) '数学',

max(case ttype when '英语' then tscor else 0 end) '英语'

from testScore

group by tname

情景三:

表:table1

字段:id , name

内容:

----------------

1,aaa

1,bbb

2,ccc

2,ddd

3,eee

3,fff

--------------

希望结果:

---------------------

1 aaa bbb [aaa bbb之间半角空格区分,以下类似]

2 ccc ddd

3 eee fff

复制代码 代码如下:

f exists(select * from sysobjects where name='test1')

drop table test1

go

create table test1

(

tid int primary key identity(1,1),

tnum int null,

tname varchar(30) null

)

go

insert into test1 values (1,'aa')

insert into test1 values (1,'bb')

insert into test1 values (2,'cc')

insert into test1 values (2,'dd')

insert into test1 values (3,'ee')

insert into test1 values (3,'ff')

SELECT * FROM ( SELECT DISTINCT tnum FROM test1

)A

OUTER APPLY(

SELECT tname= STUFF(REPLACE(REPLACE(

(

SELECT tname FROM test1 N

WHERE tnum = A.tnum

FOR XML AUTO

), '<N tname="', ' '), '"/>', ''), 1, 1, '')

)N

情景四:

我需要将表tb中的数据select出来,得到下面第二个表的数据,如何写select语句?

表tb

id a flag class

----------+---------+--------+---------

1 2 1 A

2 2 1 A

3 4 1 A

4 5 2 A

5 3 2 A

6 4 1 A

7 2 1 A

8 3 2 A

9 4 2 A

10 5 3 A

11 5 1 B

12 2 1 B

13 3 1 B

14 4 1 B

15 2 3 B

16 7 3 B

17 3 2 B

18 4 1 B

19 5 1 B

20 2 2 B

21 1 1 B

22 1 1 C

23 2 3 C

24 6 3 C

25 3 2 C

...

需要选取出如下的表,按class列进行分组,a1,a2,a3字段分别为flag=1、2、3时tb表中a字段的求和

选取后

a1 a2 a3 class

-----------+------------+-----------------+--------------

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

复制代码 代码如下:

---检查表是否存在

if exists(select * from sysobjects where name='testFlag')

drop table testFlag

go

---创建表

create table testFlag

(

tid int primary key identity(1,1),

tname varchar(30) null,

tflag int null,

tscor int null

)

go

---插入数据

insert into testFlag (tname,tflag,tscor)

select 'aaa',1,11

union all

select 'aaa',2,19

union all

select 'aaa',3,12

union all

select 'aaa',1,18

union all

select 'aaa',2,19

union all

select 'aaa',3,21

union all

select 'bbb',1,11

union all

select 'bbb',2,19

union all

select 'bbb',3,12

union all

select 'bbb',1,18

union all

select 'bbb',2,19

union all

select 'bbb',3,21

----查询语句

select distinct tname,(select sum(tscor) from testFlag where tflag=1 and testFlag.tname = t.tname) as 'flag1',(select sum(tscor) from testFlag where tflag=2 and testFlag.tname = t.tname) as 'flag2',(select sum(tscor) from testFlag where tflag=3 and testFlag.tname = t.tname) as 'flag3' from testFlag t group by tname,tflag

时间: 2024-09-22 23:39:04

sql 分组查询问题的相关文章

java-一个纠结的sql分组查询语句

问题描述 一个纠结的sql分组查询语句 是这样的 数据库里有一张 宿舍用电表(宿舍号,时间,电表度数) dormitoryElectric(dormitory,time,electric) 里面存的是每个小时电表上的度数,那我想查询所有宿舍近7天的每天用电度数要怎么写. 效果大概是这样的: 宿舍1 第一天用电度数 第二天用电度数 第三天用电度数 ... 宿舍2 第一天用电度数 第二天用电度数 第三天用电度数 ... 第二天用电度数应该是第二天的最后一次电表度数减去第一天的最后一次电表度数 解决方

ms sql-MS SQL 分组查询的疑问。

问题描述 MS SQL 分组查询的疑问. 我突然间对数据库的分组查询好像忘得差不多了,也突然变得不太理解.(解决问题) 如,表结构: Table Name:TEST ID name sex(bit) area ----------------------------- 1 mr.a 1 CN 2 mr.b 1 USA 3 mr.c 1 CN 4 mr.d 0 USA 5 mr.e 0 JP 6 mr.f 1 USA ----------------------------- GROUP 如何查询

sql 分组查询问题_MsSql

情景一: 表中数据 name score aaa 11 aaa 19 bbb 12 bbb 18 ccc 19 ddd 21 期望查询结果如下 name score aaa 30 bbb 30 ccc 19 ddd 21 复制代码 代码如下: ---检查表是否存在 if exists(select * from sysobjects where name='testSum') drop table testSum go ---创建表 create table testSum ( tid int

sql server 按日期分组查询

问题描述 sql server 按日期分组查询 各位 大侠,请问这个我弄错了吗,有个字段payment_time,时间格式2015-12-23 19:16:07 ,我要查询把后面时间去掉,变成2015-12-23 这个格式,然后统计每天id数量,我在网上搜索到下面的这个转换日期的代码,我自己添加的count(id),但是不知道为什么不是我想要的结果,哪里不对吗? SELECT substring(Convert(VARCHAR(30), payment_time, 120),1,10) as 日

sql 对相对数据进行分组查询语句

sql 对相对数据进行分组查询语句 /* | section | province | area   | zone | postcode | cardtype                 | telco  | | 1879728 | 青海      | 共和         | 0974 | 813000   | 移动187卡                   | 移动   | | 1879741 | 湖南      | 长沙         | 0731 | 410000   | 移动1

SQL数据查询语句

查询是SQL语言的核心,SQL语言只提供唯一一个用于数据库查询的语句,即SELECT语句.用于表达SQL查询的SELECT语句是功能最强也是最复杂的SQL语句,它提供了很多选项和使用方法.SELECT语句的命令格式如下: SELECT查询语句是由七个子句构成,其中SELECT和FROM子句是一个完整SELECT查询语句必须要有的,其它的子句可以根据具体需要任选.上述的每个子句功能说明如下: (1)SELECT子句 列出所有要求SELECT语句进行检索的数据项,这些项可能取自数据库中关系表的列,也

mysql 数据库-关于mysql关联多列查询,分组查询并输出每组数据的中值

问题描述 关于mysql关联多列查询,分组查询并输出每组数据的中值 imei phone key value 863184021544828 lenovoa788t c14 484 355799050650579 samsungi9500 c14 542 355799050650579 samsungi9500 c14 623 868331013987821 huaweiu9508 c14 523 868331013987821 huaweiu9508 c14 498 8683310139878

关于sql server查询语句的写法。

问题描述 关于sql server查询语句的写法. 怎样写一个查询语句select distinct ID from TrainTime order by ID select Station from TrainTime where S_No='1'order by ID select Stationfrom TrainTime where D_Time='-' order by ID 怎样把这3个查询语句写为一句啊,让查询查来的结果为这3列数据. 因为我想建一个表,为3列,列名为:列车车次.起

sql语句查询问题。。。。。

问题描述 sql语句查询问题..... 一张学生表,字段学生姓名name,学科xk,成绩cj,查询平均成绩大于90,并且语文成绩大于95的学生姓名, 求解答~!!! 解决方案 命名查询的sql语句的问题一个SQL语句查询问题(查询最小值SQL语句中模糊查询的下划线的问题 解决方案二: select distinct 姓名name from (select 姓名name, 学科xk,成绩cj,avg(成绩cj) over (partition by 姓名name) as avg_cj from 学