mysql 分组之后如何统计记录条数, gourp by 之后的 count

mysql 分组之后如何统计记录条数, gourp by 之后的 count,第1张

需要准备的工具:电脑,sql数据库。

1、首先新建一个test表,有id,name,second三个字段,其中name字段有重复数据。

2、输入“select name,max(second) from test group by name”语句,点击运行。

3、可以看到已经查询出按name分组后取出的second最大的一条记录。

4、以输入“select name,max(second) from test group by name order by max(second) desc”语句,按分组后second最大值进行降序。

5、如果想查询mysql分组后最小的一条记录,输入“select name,min(second) from test group by name”语句,点击运行即可。

我这里给你一个 类似的例子, 表结构也就是简单的 分类, 明细.要查询每个分类下面, 随机明细 几条的情况.你可以参考参考.测试表与测试数据。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 (0.00 sec)SELECTgroup_code,`name`FROM(SELECTCASEWHEN @cn != group_code THEN @rownum:= 1ELSE @rownum:= @rownum + 1END AS No,group_code,@cn := group_code AS group_code1,nameFROM(SELECT @rownum:=0) r,(SELECT @cn:= '') p,

不列出表结构及测试数据,只能这样大概写个思路了:

select a.*

from

(

select t1.*,(select count(*)+1 from 表 where 分组字段=t1.分组字段 and 排序字段<t1.排序字段) as group_id

from 表 t1

) a

where a.group_id<=3


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

原文地址: http://outofmemory.cn/zaji/8781716.html

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

发表评论

登录后才能评论

评论列表(0条)

保存