`
少女杀手
  • 浏览: 131852 次
  • 性别: Icon_minigender_1
  • 来自: 约旦河西岸
社区版块
存档分类
最新评论

sql分组查询问题

    博客分类:
  • 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

 

分享到:
评论
1 楼 wait10000y 2010-10-28  
......

相关推荐

    sql 分组查询问题

    sql 分组查询问题 Sql 分组查询是 SQL 语言中的一种重要查询方式,用于对数据进行分组和聚合操作。本文将通过三个情景来详细介绍 sql 分组查询问题的解决方法。 情景一:基本分组查询 在这个情景中,我们需要对一...

    SQL003分组查询练习.sql

    SQL003分组查询练习

    SQL之分组统计和子查询专题

    SQL之分组统计和子查询专题 李兴华老师的ORACLE数据库课程中,对分组统计和子查询进行了深入详解。本课程涵盖了分组统计的重点和难点、子查询的概念和应用场景,以及在实际开发中需要注意的细节。 分组统计 在SQL...

    SuperMap iObjects Java SQL查询中的分组查询

    这个范例主要是实现SQL查询中的分组查询,可以查询在一定的空间范围内各个地物的数目,这个在实践中很用的较广,比如查询某一区域内A类建筑、B类建筑、C类建筑的数目,有利于后续的小区的建设等等,但是这个查询只能...

    SQL分组查询的教学探讨.pdf

    标题和描述中提到的关键词“SQL分组查询”、“教学探讨”、“数据库课程”、“教学效果”、“聚合函数”、“笛卡尔积”、“视图”、“HAVING子句”、“WHERE子句”、“ORDER BY子句”是文章讨论的核心知识点。...

    sqlserver+group by分组查询分页存储过程

    根据给定的SQL Server存储过程代码片段,我们可以深入解析与SQL Server中的`GROUP BY`分组查询、存储过程以及分页技术相关的知识点。 ### SQL Server中的`GROUP BY`分组查询 `GROUP BY`子句在SQL查询语言中用于将...

    sql分组查询和聚合函数

    ### SQL 分组查询和聚合函数详解 #### 一、引言 SQL 是一门强大的数据库查询语言,用于管理和操作关系型数据库。其中,分组查询和聚合函数是非常重要的组成部分,能够帮助用户快速有效地从大量数据中提取有用信息。...

    SQL高级实例-模糊查询-分组随机查询-转换

    其次,**分组查询**是SQL中处理多行数据并进行统计分析的重要工具。`GROUP BY`语句允许我们根据一个或多个列对数据进行分组,然后使用聚合函数如`COUNT`、`SUM`、`AVG`、`MIN`和`MAX`来计算每组的总和、平均值等信息...

    sql 分组,统计等常用语句

    这不仅包括基本的分组查询、条件筛选,还涉及到了更高级的功能,如聚合函数的使用、ROLLUP和CUBE的区别等。 ### 一、排序:ORDER BY `ORDER BY`子句用于对结果集进行排序,可以按照一个或多个列的值进行升序(ASC...

    分组计算[按时间]通用[sql分组;C#分组]

    #### SQL分组计算 SQL中的`GROUP BY`子句用于结合聚合函数(如`SUM()`, `AVG()`, `MAX()`, `MIN()`等),对结果集按照一个或多个列进行分组。这使得我们可以对每一组执行聚合操作,从而获得更有意义的数据视图。 #...

    SQL Server分组排序取数据的实现

    在SQL Server中,分组和排序是数据处理的两个关键操作。它们可以帮助我们对大量数据进行聚合、组织和筛选,以便更好地分析和理解数据。本文将深入探讨如何在SQL Server中实现分组排序并获取每组的特定行数据。 首先...

    sql分组查询

    下面的查询从说法上可以算得上是分组查询了,但是分组查询是不是就是指用group by来操作呢,我想在看了下面的例子后你会有清楚的答案

    oracle-plsql.zip_oracle_pl sql 分组查询_plsql_plsql 分组查询

    2. **分组查询**:在SQL中,GROUP BY语句用于根据一个或多个列对结果进行分组,常与聚合函数(如COUNT、SUM、AVG、MAX和MIN)一起使用,以便对每个分组执行统计计算。 3. **多表查询**:通过JOIN操作,可以从两个或...

    Sqlch11_2having条件分组查询.sql

    Sqlch11_2having条件分组查询.sql,Sqlch11_2having条件分组查询.sql Sqlch11_2having条件分组查询.sql,Sqlch11_2having条件分组查询.sql

    SQL各种查询方法

    4. **分组查询**:`GROUP BY`语句用于将数据按一个或多个列进行分组,常与聚合函数(如`COUNT`, `SUM`, `AVG`, `MIN`, `MAX`)结合使用,例如`SELECT 列1, COUNT(*) FROM 表名 GROUP BY 列1`计算每组的数量。...

    sqlserver 分组合并 分组统计

    sqlserver 分组合并字符串 分组统计数量

    sql2000分组统计

    在SQL Server 2000中,分组统计是一个核心的查询功能,它允许数据库管理员和开发者对数据进行聚合操作,以获取特定字段的汇总信息。分组统计通常涉及GROUP BY语句,配合COUNT(), SUM(), AVG(), MAX() 和 MIN()等聚合...

    sql数据查询系统

    查询语句可能包含WHERE子句以过滤数据,GROUP BY子句进行分组,以及ORDER BY子句进行排序。 4. **安全性**:由于SQL注入攻击的可能性,系统需要对用户输入的查询进行适当的验证和清理,以防止恶意SQL代码被执行。这...

    SQL查询问题的图片

    SQL查询问题的图片 这是我在 论坛里所发贴: “Sql查询问题,急!!“如何按天、周、月、季度、年 进行分组查询”[问题点数:20分] URL:...

Global site tag (gtag.js) - Google Analytics