mysql按照两个时间段求记录总数,求大佬告知

mysql按照两个时间段求记录总数,求大佬告知,第1张

-- by sleest 2018/01/19

select areaID,

   sum(case when datediff(begindate, enddate) < 3 

                then 1 else 0 end) as lt3, -- 小于3

       sum(case when datediff(begindate, enddate) > 3 

                then 1 else 0 end) as gt3, -- 大于3

       sum(case when datediff(begindate, enddate) > 6 

then 1 else 0 end) as gt6, -- 大于6

       sum(case when datediff(begindate, enddate) > 9 

                then 1 else 0 end) as gt9, -- 大于9

       sum(case when datediff(begindate, enddate) > 6 

                 and datediff(begindate, enddate) <= 9 

                then 1 else 0 end) as gt6_le9 -- 大于6小于等于9

  from user

 group by areaID

给你举个例子,你自己按照你所在当前表的情况来进行查询。

例如:

select 列1 avg(列2) as xz from 表 group by 列1 order by xz desc ;

解释:

avg()函数是求某列的平均值,group by是对某列分组,按照SQL标准,分组要和聚合函数一起配合使用才有意义[虽然在mysql中不会报错]。order by xz desc表示的是对xz进行降序,就可以把最高的平均值算出来。

我这里给你一个 类似的例子, 表结构也就是简单的 分类, 明细

要查询每个分类下面, 随机明细 几条的情况

你可以参考参考

测试表与测试数据。CREATE TABLE test_order_by_rand (group_code varchar(10), name varchar(10));INSERT INTO test_order_by_rand VALUES('水果', '苹果');INSERT INTO test_order_by_rand VALUES('水果', '梨子');INSERT INTO test_order_by_rand VALUES('水果', '香蕉');INSERT INTO test_order_by_rand VALUES('水果', '桃子');INSERT INTO test_order_by_rand VALUES('水果', '菠萝');INSERT INTO test_order_by_rand VALUES('蔬菜', '萝卜');INSERT INTO test_order_by_rand VALUES('蔬菜', '白菜');INSERT INTO test_order_by_rand VALUES('蔬菜', '蘑菇');INSERT INTO test_order_by_rand VALUES('蔬菜', '毛豆');INSERT INTO test_order_by_rand VALUES('蔬菜', '青椒');INSERT INTO test_order_by_rand VALUES('坚果', '核桃');INSERT INTO test_order_by_rand VALUES('坚果', '榛子');INSERT INTO test_order_by_rand VALUES('坚果', '杏仁');INSERT INTO test_order_by_rand VALUES('坚果', '花生');INSERT INTO test_order_by_rand VALUES('坚果', '开心果');预期目标, 按照 group_code 进行分组, 每个分组内, 进行随机获取数据

SELECT group_code, nameFROM(SELECT CASE WHEN @cn != group_code THEN @rownum:= 1 ELSE @rownum:= @rownum + 1 END AS No, group_code, @cn := group_code AS group_code, nameFROM (SELECT @rownum:=0) r, (SELECT @cn:= '') p, (SELECT FROM test_order_by_rand order by group_code, rand()) tmp) subQueryWHERE No <= 3ORDER BY group_code; 这里套了2层子查询, 其中的(SELECT FROM test_order_by_rand order by group_code, rand()) tmp 用于实现, 针对每一个 group_code 进行分组, 下属的 name 的数据, 进行随机排序其中的() subQuery用于实现, 针对 前面的 按 group_code 分组, name 随机排序后的数据。模拟一个 row_number() over(partition by group_code) 的处理最后的 No <= 3 用于限制, 每一个 group_code 下面, 显示多少行执行结果:+------------+--------+| group_code | name |+------------+--------+| 水果 | 苹果 || 水果 | 香蕉 || 水果 | 梨子 || 蔬菜 | 青椒 || 蔬菜 | 白菜 || 蔬菜 | 蘑菇 || 坚果 | 核桃 || 坚果 | 花生 || 坚果 | 开心果 |+------------+--------+9 rows in set (000 sec)

SELECT

group_code,

`name`

FROM

(

SELECT

CASE

WHEN @cn != group_code THEN @rownum:= 1

ELSE @rownum:= @rownum + 1

END AS No,

group_code,

@cn := group_code AS group_code1,

name

FROM

(SELECT @rownum:=0) r,

(SELECT @cn:= '') p,

允许一个将额外行添加到简略输出端 WITH

ROLLUP 修饰符。这些行代表高层(或高聚集)简略 *** 作。ROLLUP 因而允许你在多层分析的角度回答有关问询的问题

或者你可以使用 ROLLUP, 它能用一个问询提供双层分析。

以上就是关于mysql按照两个时间段求记录总数,求大佬告知全部的内容,包括:mysql按照两个时间段求记录总数,求大佬告知、mysql进行分组查询时,怎么把count(*)也封装到java bean里、mysql 分组后随机取3条,不够的全部取出来,应该怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9512270.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存