❶ sql语句统计固定分组的成员数量
MSSQL 思路 case when 0<字段<100
then 0-100
这样不能判断 有多少个组···要判断多少个组 就先查询 最大数量 做个循环 循环次数= 最大数量/100
动态拼接 case when
希望能帮到你····这个方案 感觉有点2 希望有人有更好的 推荐·
❷ SQL 分组数据
连载的上一篇文章,我们讲到通过 SQL 聚合函数可以汇总数据,比如对行进行计数,计算和与平均数,获取最大值和最小值。
但目前为止,我们的汇总都是正对所有行或匹配 WHERE 子句的数据上进行的。比如返回供应商 DLL01 提供的产品数目:
运行结果:
那如果我们想要返回每个供应商提供的产品数目呢?这就需要用到分组聚合了。使用分组可以将数据分为多个逻辑组,然后对每个组进行聚合计算。
分组的创建使用 SELECT 语句中的 GROUP BY 子句,比如下面的 SQL 返回每个供应商提供的产品数目:
运行结果:
上述 SELECT 语句返回两个列, vend_id 为供应商 ID,是分组字段; num_prods 为计算字段,使用 count(*) 聚合而来。 GROUP BY 子句告诉 DBMS 按 vend_id 排序并分组数据,然后对每个分组而不是整个数据集进行聚合。
除了使用 GROUP BY 分组数据外, SQL 还允许过滤分组,规定包含哪些分组,排除哪些分组。比如,我们只想列出供应产品数目在 2 种以上的供应商及其供应产品的数目。
这里有个过滤条件: 供应产品数目大于 2 ,条件中的 供应产品数目 是针对分组后进行聚合产生的计算字段,因此无法使用 WHERE 子句。 WHERE 子句过滤时指定的是行,而不是分组。
为此, SQL 提供了 HAVING 子句来过滤分组,并且 HAVING 支持所有 WHERE 操作符。下面,我们来完成供应产品数目在 2 种以上的供应商及其供应产品的数目。
运行结果:
跟前面的结果相比,供应产品数目等于 2 的供应商信息就不见啦~
关于 WHERE 子句和 HAVING 子句的区别,我们可以再通过一个案例理解一下。下面的 SQL 检索具有两个或以上产品且其价格大于等于 4 的供应商。
其中产品表如下:
SQL 语句如下:
运行结果:
截止目前,我们已经学了不少的 SELECT 子句,下面小鱼针对目前我们已经学习的 SELECT 子句来总结一下他们在 SELECT 语句中的先后顺序。
表中子句的排列顺序即为它们在 SELECT 语句中依次出现的次序:
还是上面的例子,检索具有两个或以上产品且其价格大于等于 4 的供应商和其供应的产品数目,不过检索检索需要按照产品数目升序排列。
运行结果:
本节,我们学习了使用 GROUP BY 子句对多组数据进行汇总计算,并返回每个分组的结果。并实践了如何使用 HAVING 子句过滤分组。
❸ 如何这样用sql分组
select user_id,count(decode(state,1,'1'))as"count(state=1)",
count(decode(state,2,'1'))as"count(state=2)",
count(decode(state,3,'1'))"count(state=3)"
from a
groupbyuser_id;
❹ sql查询分组怎么做
select user_id
,sum(case when trade_type='4' then amount else 0 end) as trade_type4
,sum(case when trade_type='5' then amount else 0 end) as trade_type5
,sum(case when trade_type='11' then amount else 0 end) as trade_type11
,sum(case when trade_type='12' then amount else 0 end) as trade_type12
from tab_name
group by user_id
❺ SQL如何查询一张表的所有字段并按其中一个字段进行分组
1、创建测试表,
create table test_group_cols(id number, value varchar2(20), remark varchar2(20));
❻ sql语言中分组问题
看你是什么数据库了,比如sqlserver可以用month(时间字段)来分组,oracle甚至可以用substr(时间字段,1,7)来分组,这没什么好烦恼的了。