sql语句分组
‘壹’ 如何理解sql语句的分组概念
在介绍group by 和having子句前,我们必需先讲讲sql语言中一种特殊的函数:聚合函数,例如sum、count、max、 avg等。这些函数和其它函数的根本区别就是它们一般作用在多条记录上。 Sql代码 select sum(population) from bbc select sum(population) from bbc 这里的sum作用在所有返回记录的population字段上,结果就是该查询只返回一个结果,即所有国家的总人口数。
通过使用group by子句,可以让sum 和count这些函数对属于一组的数据起作用。当你指定group by region 时,属于同一个region(地区)的一组数据将只能返回一行值,也就是说,表中所有除region(地区)外的字段,只能通过 sum、count等聚合函数运算后返回一个值。
having子句可以让我们筛选成组后的各组数据,where子句在聚合前先筛选记录.也就是说作用在group by子句和having子句前.
而having子句在聚合后对组记录进行筛选。
让我们还是通过具体的实例来理解group by和having子句,还采用第三节介绍的bbc表。
SQL实例:
一、显示每个地区的总人口数和总面积:Sql代码 select region,sum(population),sum(area) from bbc group by region select region,sum(population),sum(area) from bbc group by region 先以region把返回记录分成多个组,这就是group by的字面含义。分完组后,然后用聚合函数对每组中的不同字段(一或多条记录)作运算。
二、 显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区。Sql代码 select region,sum(population),sum(area) from bbc group by region having sum(area)>1000000 select region,sum(population),sum(area) from bbc group by region having sum(area)>1000000 在这里,我们不能用where来筛选超过1000000的地区,因为表中不存在这样一条记录。
相反,having子句可以让我们筛选成组后的各组数据.
‘贰’ SQL中分组短语是什么
SQL中分组短语是:group by。
GROUP BY 语句
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
GROUP BY 语法
SELECT column_name, aggregate_function(column_name)FROM table_name WHERE column_name operator valueGROUP BY column_name
Group By 的使用:
1、 Group By [Expressions]:
这个恐怕是Group By语句最常见的用法了,Group By + [分组字段](可以有多个)。在执行了这个操作以后,数据集将根据分组字段的值将一个数据集划分成各个不同的小组。比如有如下数据集,其中水果名称(FruitName)和出产国家(ProctPlace)为联合主键:
SELECTFruitName,ProctPlace,Price,IDASIDE,Discount
FROMT_TEST_FRUITINFO
WHERE(ProctPlace=N'china')ORDERBYIDE
这里只有在ORDER BY语句中才可以使用IDE,其他条件语句中如果需要引用列名则只能使用ID,而不能使用IDE。
以上就是Group By的相关使用说明。内容参考与网站CSDN中的“SQL语句Group By 语句小结“。
‘叁’ SQL语句 group by子句后的分组项如果有多个是怎样进行分组的
表示根据后面的字段来分组,如果只有1个字段,那只是根据这个字段的值来进行一次分组就可以了;若后面有多个字段,那表示根据多字段的值来进行层次分组,分组层次从左到右,即先按第1个字段分组,然后在第1个字段值相同的记录中,再根据第2个字段的值进行分组;接着第2个字段值相同的记录中,再根据第3个字段的值进行分组......依次类推。
‘肆’ sql语句 如何分组后得到记录总数
SELECT COUNT(*)
FROM (SELECT 分组字段 FROM 表
GROUP BY 分组字段
)别名
或者
SELECT COUNT(*)
FROM (SELECT distinct 分组字段 FROM 表)别名
(4)sql语句分组扩展阅读:
SQL分组查询
在SQL Server中使用的分组查询是ORDER BY子句,使用ORDER BY子句要同聚合函数配合使用才能完成分组查询,在SELECT查询的字段中如果字段没有使用聚合函数就必须出现在ORDER BY子句中(即SELECT后边的字段名要么出现在聚合函数中,要么在ORDER BY子句中使用)
在分组查询中还可以配合使用HAVING子句,定义查询条件。
使用group by进行分组查询
在使用group by关键字时,在select列表中可以指定的项目是有限制的,select语句中仅许以下几项:
1、被分组的列
2、为每个分组返回一个值得表达式,例如用一个列名作为参数的聚合函数
3、group by 有一个原则,就是 select 后面的所有列中,没有使用聚合函数的列,必须出现在 group by 后面
‘伍’ SQL语句分组查询
是SQL SERVER吗?就是想要怎样把查询结果导出到文本文档是吧?
EXEC master..xp_cmdshell 'BCP "select XLBH,CMBH,SUM(XSJE) from MDFSLSK group by XLBH,CMBH" queryout D:\XXX.TXT -c -T'
好像要在同一行才能正确执行,MDFSLSK表前可能要加上数据库名.用户名. 比如这样:数据库名.DBO.MDFSLSK
-T是使用信任连接 当然可以换成 -U"sa" -P"password",要详细了解就查一下BCP
‘陆’ SQL语言到底什么时候要用到group by
通常SELECT语句中使用了分组子句就会有聚合操作。 但执行聚合操作不一定要用分组子句。
比如:
select avg(grade) from cs
查询选课表(cs)中学生的总成绩(grade);这里就不用分组;
又如:
select sno,sum(grade) from cs group by sno
查询选课表里每个学问生的总成绩,这里就要用分组,分组的依照字段答必须是select 后没有被计算过的原始字段;
(6)sql语句分组扩展阅读:
常见语句
更新:update table1 set field1=value1 where 范围
查找:select * from table1 where field1 like ’%value1%’ (所有包含‘value1’这个模式的字符串)
排序:select * from table1 order by field1,field2 [desc]
求和:select sum(field1) as sumvalue from table1
平均:select avg(field1) as avgvalue from table1
最大:select max(field1) as maxvalue from table1
最小:select min(field1) as minvalue from table1[separator]
‘柒’ SQL语句分组查询
select case_id,
Month||'月份',
sum(jqjb_id)
from (
select case_id,
to_char(recDate,'MM') Month,
jqjb_id
from table_name
)
group by case_id,
Month||'月份'
如果以上字段是实际字段,那么把 table_name修改成实际表明即可完成查询
‘捌’ sql语句分组group by 问题
select*from
(selectrow_number()over(partitionbyt1.机构号orderbyt.Acct_Baldesc)rn,*
from
(select
dd.Host_cust_id,-客户号
Business_Org_Num,--机构号
sum(Acct_Bal)Acct_Bal--存款总额
fromCJT88_ACCT_DDdd--存款表
groupbyHost_cust_id,Business_Org_Num
wheredd.stat_dt='20130824'--日期
)t1)t2
wheret2.rn<=5
试试这个
‘玖’ sql分组语句
你的意思是 以 x1 为条件 查 字段2 吧? 这和分组有关吗?
按我的理解是这样的
select 字段2 字段3 from tablename where 字段3=x1
结果
B1 X1
B2 X1
B3 X1