当前位置:首页 » 编程语言 » sql分组后加查询条件
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

sql分组后加查询条件

发布时间: 2022-08-11 06:00:32

‘壹’ sql order by分组后查询特定有特定条件的字段 的查询问题

最简单的办法,这两个查询出来的结果,再联合查询一次就行。
还有一个办法需要试试才行,我并不完全确定。
那就是女生人数那里用sum(case when gender='女' then 1 else 0 end)来做,我在oracle中用过类似的方式,不知道你的数据库这么操作行不行。

‘贰’ SQL分组且根据不同的条件查询。

SELECT 名称, 数量+(SELECT SUM(数量) FROM B表 WHERE A表.ID=B表.ID AND A表.时间<B表.时间)
FROM A表

‘叁’ sql查询怎么进行(多条件分组判断汇总)

sql多条件分组查询举例:
比如有两张表:
表一:
姓名 分数
——————
李一 2
李二 1
李三 1
张一 3
张二 2
张三 2
……
表二:

——



要查询表二中的姓的数据对表一进行分组,然后将分数统计出来。
sql语句写法如下:
SELECT
b. NAME,
sum(a.score) AS 分数
FROM
tb1 a
LEFT JOIN tb2 b ON SUBSTR(a.name FROM 1 FOR 1)= b.`name`
GROUP BY
b. NAME;
这个是Mysql的写法 Oracle把SubStr函数改一下就可以了。

‘肆’ SQL语句,分组按条件查询!

select t1.老师id,count(学生id)
from 老师 t1 left join 学生 t2 on t1.老师id=t2.老师id
where 年龄>30
group by t1.老师id

‘伍’ sql多条件分组查询,求sql语句。

分组是用来聚集汇总的,如求平均、求总和、求最大等
你这个不需要分组,直接排序就可以了

selectname,datefromtableorderbynameasc,datedesc

如果每组要按date的降序排列,也挺简单

with t1 as (select name, max(date) md from table group by name,

t2 as (select table.name name, table.date date, t1.md from table join t1 on table.name=t1.name

order by t1.md)

select name,date from t2

‘陆’ 分组查询后再怎样按条件查询

sql多条件分组查询举例: 比如有两张表: 表一: 姓名 分数 —————— 李一 2 李二 1 李三 1 张一 3 张二 2 张三 2 …… 表二: 姓 —— 李 张 王 要查询表二中的姓的数据对表一进行分组,然后将分数统计出来。 sql语句写法如下: SELECT b. NAME, sum(a.score) AS 分数 FROM tb1 a LEFT JOIN tb2 b ON SUBSTR(a.name FROM 1 FOR 1)= b.`name` GROUP BY b. NAME; 这个是Mysql的写法 Oracle把SubStr函数改一下就可以了。

‘柒’ 请问,在sql查询时,分组后满足条件的查询关键短语是什么

选 having
group by 之后再添加条件,使用having

‘捌’ 关于SQL分组查询按条件

带明细的分组可以用compute by,group by分组是不能带明细的,所以如果是group by可以显示分组列name,但是不能带id
select id,name
from a
order by name
compute max(score)
by name

‘玖’ 在SQL中分组查询 Group by 的存在条件是什么

Group By子句
Group By子句可以将表的行划分为不同的组。分别总结每个组,这样就可以控制想要看见的详细信息的级别。

语法:

[ Group By [ ALL ] Group_By_expression[ ,...n ]

[ WITH ] ]

参数说明:

ALL:包含所有组和结果集,甚至包含那些任何行都不满足WHERE子句指定的搜索条件的组和结果集。如果指定了ALL,将对组中不满足搜索条件的汇总列返回空值。不能用CUBE或ROLLUP运算符指定ALL。如果访问远程表的查询中有WHERE子句,则不支持Group By ALL操作。

Group_By_expression:对其执行分组的表达式。Group_By_expression也称为分组列。Group_By_expression可以是列或引用列的非聚合表达式。在选择列表内定义的列的别名不能用于指定分组列。对于不包含CUBE或ROLLUP的Group By子句,Group_By_ expression的项数受查询所涉及的Group By列的大小、聚合列和聚合值的限制。该限制从8060字节的限制开始,对保存中间查询结果所需的中间级工作表有8060字节的限制。如果指定了CUBE或ROLLUP,则最多只能有10个分组表达式。

CUBE:指定在结果集内不仅包含由Group By提供的正常行,还包含汇总行。在结果集内返回每个可能的组和子组组合的Group By汇总行。Group By汇总行在结果中显示为NULL,但可用来表示所有值。使用GroupING函数确定结果集内的空值是否是Group By汇总值。结果集内的汇总行数取决于Group By子句内包含的列数。Group By子句中的每个操作数(列)绑定在分组NULL下,并且分组适用于所有其他操作数(列)。由于CUBE返回每个可能的组和子组组合,因此,不论指定分组列所使用的是什么顺序,行数都相同。

ROLLUP:指定在结果集内不仅包含由Group By提供的正常行,还包含汇总行。按层次结构顺序,从组内的最低级别到最高级别汇总组。组的层次结构取决于指定分组列时所使用的顺序。更改分组列的顺序会影响在结果集内生成的行数。

使用Group By子句的注意事项。

(1)在SELECT子句的字段列表中,除了聚集函数外,其他所出现的字段一定要在Group By子句中有定义才行。例如“Group By A,B”,那么“SELECT SUM(A),C”就有问题,因为C不在Group By中,但是SUM(A)是可以的。

(2)SELECT子句的字段列表中不一定要有聚集函数,但至少要用到Group By子句列表中的一个项目。例如“Group By A,B,C”,则“SELECT A”是可以的。

(3)在SQL Server中text、ntext和image数据类型的字段不能作为Group By子句的分组依据。

(4)Group By子句不能使用字段别名。
1.按单列进行分组

Group By子句可以基于指定某一列的值将数据集合划分为多个分组,同一组内所有记录在分组属性上具有相同值。

示例:

把“student”表按照“性别”这个单列进行分组。在查询分析器中输入的SQL语句如下:

use student

select 性别

from student

Group By 性别

但仍然要强调SELECT子句必须与Group By后的子句或者是分组函数列相一致。

例如,由于下列查询中“姓名”列既不包含在Group By子句中,也不包含在分组函数中,所以是错误的。错误的SQL语句如下:

use student select 姓名,性别 from student Group By 性别

例如,在“grade”表中,按“学期”分组查询。SQL语句如下:

use studnet select 学期 from grade Group By 学期

2.按多列进行分组

Group By子句可以基于指定多列的值将数据集合划分为多个分组。

示例:

在“student”表中,按照“性别”和“年龄”列进行分组。在查询分析中输入的SQL语句如下:

use student

select 性别,年龄

from student

Group By 性别,年龄

在“student”表中,首先按照“性别”分组,然后再按照“年龄”分组。

再举一个例子,例如,在“grade”表中,按照“学号”和“课程代号”列进行分组。SQL语句如下:

use student

select 学号,课程代号 from grade Group By 学号,课程代号

按多列进行分组时有NULL组的是如何处理的。当表按多列进行分组时有NULL组,这时NULL被作为一个特定值处理,就像其他任何值一样。也就是说,如果在某个分组列中存在两个NULL,则按它们有相同的值那样处理,并将它们放在相同的组中。

示例:

在“grade”表中,按“学期”和“课程代号”列进行分组。在查询分析器中输入的SQL语句如下:

use student

select 学期,课程代号

from grade

Group By 学期,课程代号

3.与聚集函数一起使用

Group By子句是经常与聚集函数一起使用。如果SELECT子句中包含聚集函数,则计算每组的汇总值,当用户指定Group By时,选择列表中任一非聚集表达式内的所有列都应包含在Group By列表中,或者Group By表达式必须与选择列表表达式完全匹配。

示例:

在“student”表中,分别求男女生的平均年龄。在查询分析器中输入的SQL语句如下:

use student

select 性别,avg(年龄) as 平均年龄

from student

Group By 性别

例如,在“student”表中,分别求有多少个男生和女生。SQL语句如下:

use student

select 性别,count(性别) as 人数 from student Group By 性别

说明:关于聚合函数的详细讲解可参阅9.2.1节。

4.与HAVING子句一起使用

HAVING子句对Group By子句选择出来的结果进行再次筛选,最后输出符合HAVING子句中条件的记录。HAVING子句的语法与WHERE子句的语法相类似,惟一不同的是HAVING子句中可以包含聚合函数。

语法:

[HAVING <search_condition>]

参数说明:

<search_condition>:指定组或聚合应满足的搜索条件。当HAVING与Group By ALL一起使用时,HAVING 子句替代ALL。

示例:

在“student”表中,按“性别”分组求平均年龄,并且查询其平均年龄大于21的学生信息。在查询分析器中输入的SQL语句如下:

use student

select avg(年龄), 性别

from student

Group By 性别

having avg(年龄)>21

在“grade”表中,按“学期”分组求平均成绩,并且查询“平均成绩”大于93的课程信息。在查询分析器中输入的SQL语句如下:

use student

select 学期,avg(课程成绩) as 平均成绩

from grade

Group By 学期

having avg(课程成绩)>93

说明:HAVING查询条件是在进行分组操作之后才应用的;在HAVING子句中不能使用text、image和ntext 数据类型。

5.对统计结果进行排序

统计结果并不能保证结果集内记录按一定顺序排列,如果使用ORDER By子句,就可以使结果集中的结果按一定的顺序(升序、降序)排序。

示例:

在“student”表中,按“性别”和“年龄”列分组,并按“年龄”列降序排序。在查询分析器中输入的SQL语句如下:

use student

select 性别,年龄

from student

Group By 性别,年龄

order By 年龄 desc

例如,在“grade”表中,按“学号”分组,并按课程的“平均成绩”升序排序。SQL语句如下:

use student

select 学号,avg(课程成绩) as 平均成绩 from grade Group By 学号 order By 平均成绩

‘拾’ 如何在已有的SQL查询的语句中,再添加一个查询条件

select * from
(
select a.*, b.TicketTypeKind from TBL_TicketBasic as a
left join
TBL_TicketType as b on a.TicketType = b.TicketTypeNo
)as c
where
(
(c.TicketTypeKind = '2' and c.InDatetime<dateadd(month,-3,getdate()))
or (c.TicketTypeKind = '1' and c.InDatetime<dateadd(month,-6,getdate())
)
and c.票据状态 = ‘未销号’
)