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

sql表格分组汇总

发布时间: 2022-06-30 14:26:25

1. 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函数改一下就可以了。

2. SQL分组汇总问题

CREATETABLE#test(AVARCHAR(100),bFLOAT,cDATE)

INSERTINTO#test(A,B,c)
SELECT'A01',10,'2017-10-06'UNIONALL
SELECT'A01',50,'2017-10-07'UNIONALL
SELECT'A01',30,'2017-10-16'UNIONALL
SELECT'B01',10,'2017-10-06'
--SELECT*FROM#test
;withaaas(
select
a
,min(C)min_date,dateadd(dd,3,min(C))max_date
from
#test
groupby
a
)
select
bb.A
,sum(b)
,bb.c
from
aainnerjoin#testbbonaa.A=bb.Aand(bb.cbetweenaa.min_dateandaa.max_date)
groupby
bb.A,bb.c


droptable#test

临时数据貌似有问题,2017-10-16的数据不应该被统计到才是正确

3. SQL对一组数据分组汇总

select left(c,charindex('-',c)-1),sum(d) from t
Group by left(c,charindex('-',c)-1)
--怎么还有102101-112呢?

4. 以6.2节建立的各表为例,用sql完成以下汇总或分组查询

摘要 SUM(列) --求出总和,操作的列是数字

5. sql语句 如何分组后得到记录总数

SELECT COUNT(*)

FROM (SELECT 分组字段 FROM 表

GROUP BY 分组字段

)别名


或者

SELECT COUNT(*)

FROM (SELECT distinct 分组字段 FROM 表)别名

(5)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 后面

6. 数据库中如何分类、分组并总计SQL数据

通常,我们确实需要对所有数据进行排序。SQL的ORDER BY子句将数据按字母或数字顺序进行排列。因此,同类数据明显分类到各个组中。然而,这些组只是分类的结果,它们并不是真正的组。ORDER BY显示每一个记录,而一个组可能代表多个记录。 2、减少组中的相似数据 分类与分组的最大不同在于:分类数据显示(任何限定标准内的)所有记录,而分组数据不显示这些记录。GROUP BY子句减少一个记录中的相似数据。例如,GROUP BY能够从重复那些值的源文件中返回一个唯一的邮政编码列表: SELECTZIP FROMCustomers GROUPBYZIP 仅包括那些在GROUP BY和SELECT列列表中字义组的列。换句话说,SELECT列表必须与GROUP列表相匹配。只有一种情况例外:SELECT列表能够包含聚合函数。(而GROUP BY不支持聚合函数。) 记住,GROUP BY不会对作为结果产生的组分类。要对组按字母或数字顺序排序,增加一个ORDER BY子句(#1)。另外,在GROUP BY子句中您不能引用一个有别名的域。组列必须在根本数据中,但它们不必出现在结果中。 3、分组前限定数据 您可以增加一个WHERE子句限定由GROUP BY分组的数据。例如,下面的语句仅返回肯塔基地区顾客的邮政编码列表。 SELECTZIP FROMCustomers WHEREState='KY' GROUPBYZIP 在GROUP BY子句求数据的值之前,WHERE对数据进行过滤,记住这一点很重要。

7. 关于sql语句怎么写两张表的关联并分组汇总

这实际上是列更换及分组汇总的问题:
请注意,进货表名用“order”会产生关键字冲突,下面代码用方括号[order]以区别于排序用关键字order,至于syabese对有关键字冲突的表名是否也是用方括号,请参阅联机说明。一般来说,不同的数据库都是采用方括号防止关键字冲突。下面代码在ACCESS和SQLSERVER均检验通过,相信syabese也没问题。为了避免冲突可以为进货表改名。

select t.gdno,sum(t.qty_sales) as sum_qty_sales,sum(t.qty_order)
as sum_qty_order from (select gdno,qty as qty_sales,0 as qty_order
from sales union all select gdno,0 as qty_sales,qty as qty_order
from [order])t group by t.gdno
试一试效果吧!注意用两表连接的办法,在两张表的gdno不能全部一一对应时可能会丢失部分数据,所以为了保证所有情况下都计算准确,我采用了UNION ALL 运算符。

8. sql中根据表中一个字段分组如何分别统计每个分组的记录数

分组统计可以参考以下操作:

当数组重复的时候分组才有意义,因为一个人也可以分为一组,只是没有意义而已,分组采用GROUP BY语句完成,语法如下:

9. 求个 SQL 多表、分组汇总合计的 语句

select a.专业级别,a.专业名称,b.计划人数,sum(case when 学生编号='X' then 1 else 0 end) 报名人数,sum(case when 学生编号<>'X' then 1 else 0 end) 审核人数,
sum(case when 住址='长沙' then 1 else 0 end) 长沙,
sum(case when 住址='望城' then 1 else 0 end) 望城,
sum(case when 住址='宁乡' then 1 else 0 end) 宁乡,
sum(case when 住址='浏阳' then 1 else 0 end) 浏阳,
sum(case when 性别='男' then 1 else 0 end) 男,
sum(case when 性别='女' then 1 else 0 end) 女,
from
TB_Student a,TB_Profession b
where a.专业级别=b.专业级别 and a.专业名称=b.专业名称
group by a.专业级别,a.专业名称,b.计划人数

10. SQL对取值范围进行分组汇总的几种办法

可以用到自定义函数,
create or replace FUNCTION g2(v NUMBER) RETURN INT IS
TYPE it IS TABLE OF INT;
BEGIN
IF v>0 AND v<= 500 THEN
RETURN 1;
ELSIF v>500 AND v<= 1000 THEN
RETURN 2;
ELSIF v>1000 AND v<= 5000 THEN
RETURN 3;
ELSIF v>5000 AND v<= 20000 THEN
RETURN 4;
ELSE
RETURN 0;
END IF;
END g2;
/
select g2(id) f, count(1) cnt from t1 group by g2(id) order by 1;
F CNT
---------- ----------
1 500
2 500
3 4000
4 15000

当然,我们也可以不借助函数,而用case when语句实现同样的条件分组,但是语句比较冗长,列名是固定的。不利于阅读与修改,也不利于代码重用。
select (case
when id >0 AND id<= 500 THEN 1
when id >500 AND id<= 1000 THEN 2
when id >1000 AND id<= 5000 THEN 3
when id >5000 AND id<= 20000 THEN 4
else 0
end) f,
count(1) cnt from t1 group by
(case
when id >0 AND id<= 500 THEN 1
when id >500 AND id<= 1000 THEN 2
when id >1000 AND id<= 5000 THEN 3
when id >5000 AND id<= 20000 THEN 4
else 0
end)
order by 1;
F CNT
---------- ----------
1 500
2 500
3 4000
4 15000