sql统计每5分钟的次数

一个按五分钟分段统计的例
 
create table tb(时间 datetime , 金额 int)
insert into tb values('2007-1-1 10:00:23' ,          8 )
insert into tb values('2007-1-1 10:01:24' ,          4 )
insert into tb values('2007-1-1 10:05:00' ,          2 )  
insert into tb values('2007-1-1 10:06:12' ,          3 )
insert into tb values('2007-1-1 10:08:00' ,          1 )
insert into tb values('2007-1-1 10:12:11' ,          5 )
go
 
--时间段>=10:00:00 and 时间段<10:05:00
select dateadd(mi,(datediff(mi,convert(varchar(10),dateadd(ss,-1,时间),120),dateadd(ss,-1,时间))/5)*5,convert(varchar(10),时间,120)) as 时间段,
       count(*) as 行数,
       sum(金额) as 总金额
from tb
group by dateadd(mi,(datediff(mi,convert(varchar(10),dateadd(ss,-1,时间),120),dateadd(ss,-1,时间))/5)*5,convert(varchar(10),时间,120))
/*
时间段                                                    行数          总金额         
------------------------------------------------------ ----------- ----------- 
2007-01-01 10:00:00.000                                3           14
2007-01-01 10:05:00.000                                2           4
2007-01-01 10:10:00.000                                1           5
(所影响的行数为 3 行)
*/
 
--时间段>10:00:00 and 时间段<=10:05:00
select dateadd(mi,(datediff(mi,convert(varchar(10),dateadd(ss,1,时间),120),dateadd(ss,1,时间))/5)*5,convert(varchar(10),时间,120)) as 时间段,
       count(*) as 行数,
       sum(金额) as 总金额
from tb
group by dateadd(mi,(datediff(mi,convert(varchar(10),dateadd(ss,1,时间),120),dateadd(ss,1,时间))/5)*5,convert(varchar(10),时间,120))
/*
时间段                                                    行数          总金额         
------------------------------------------------------ ----------- ----------- 
2007-01-01 10:00:00.000                                2           12
2007-01-01 10:05:00.000                                3           6
2007-01-01 10:10:00.000                                1           5
 
(所影响的行数为 3 行)
*/
 
drop table tb
SQL Server 中统计某个字段或记录的出现次数,通常使用 `GROUP BY` 和聚合函数 `COUNT()` 来实现。以下是几种常见场景的 SQL 查询方法: ### 查询某个字段出现的次数 使用 `GROUP BY` 对字段进行分组,并通过 `COUNT()` 函数统计每组的记录数。以下示例统计表 `a_cost` 中 `site` 字段的出现次数,并按次数降序排列: ```sql SELECT site, COUNT(site) AS 次数 FROM a_cost GROUP BY site ORDER BY COUNT(site) DESC; ``` ### 查询某个字段出现次数大于 1 的数据 在分组后,可以使用 `HAVING` 子句过滤出出现次数大于 1 的数据: ```sql SELECT site, COUNT(site) AS 次数 FROM a_cost GROUP BY site HAVING COUNT(site) > 1; ``` ### 查询某个字段出现次数最多的记录 若需获取出现次数最多的记录,可以结合 `TOP 1` 和 `ORDER BY` 实现。以下语句返回 `site` 字段中出现次数最多的记录: ```sql SELECT TOP 1 site, COUNT(site) AS 次数 FROM a_cost GROUP BY site ORDER BY COUNT(site) DESC; ``` ### 查询特定字段值的出现次数 如果希望统计某个特定值(例如 `site = 'example.com'`)在整个表中的出现次数,可以直接使用 `COUNT()` 函数: ```sql SELECT COUNT(*) AS 次数 FROM a_cost WHERE site = 'example.com'; ``` ### 查询多个字段组合的出现次数 当需要统计多个字段的组合出现次数时,可以在 `GROUP BY` 中指定多个字段: ```sql SELECT field1, field2, COUNT(*) AS 次数 FROM table_name GROUP BY field1, field2 ORDER BY 次数 DESC; ``` ### 查询记录中某字段值的累计次数 若需统计某字段值在记录中的累计出现次数,可以结合 `SUM()` 函数和 `CASE` 表达式实现。例如,统计 `FEEDBACKSTATE` 字段中 `'Y'` 的出现次数: ```sql SELECT DEPTNAME, COUNT(DEPTNAME) AS count, SUM(CASE WHEN FEEDBACKSTATE = 'Y' THEN 1 ELSE 0 END) AS reply FROM VS_FEEDBACK WHERE DEPTNAME IS NOT NULL AND areacode = '621100000000' GROUP BY DEPTNAME ORDER BY count DESC; ``` ### 查询字段值的百分比分布 在统计字段出现次数的同时,也可以计算其占总数的百分比: ```sql SELECT DEPTNAME, COUNT(DEPTNAME) AS count, SUM(CASE WHEN FEEDBACKSTATE = 'Y' THEN 1 ELSE 0 END) AS reply, (SUM(CASE WHEN FEEDBACKSTATE = 'Y' THEN 1 ELSE 0 END) * 100.0 / COUNT(DEPTNAME)) AS percentage FROM VS_FEEDBACK WHERE DEPTNAME IS NOT NULL AND areacode = '621100000000' GROUP BY DEPTNAME ORDER BY count DESC; ``` 这些方法可以满足 SQL Server 中对字段或记录出现次数统计需求,并支持进一步的筛选和排序操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值