资讯专栏INFORMATION COLUMN

mysql 分组

elisa.yang / 2070人阅读

摘要:表结构和数据查询分组最大记录默认取分组第一条分组前条记录

表结构和数据

</>复制代码

  1. create table cat(
  2. id(1) int not null auto_increment primary key,
  3. cat_id int(1),
  4. value int(1),
  5. name varchar(20)
  6. );
  7. insert into cat (cat_id,name,value) values ("1","name1", "1");
  8. insert into cat (cat_id,name,value) values ("1","name2", "2");
  9. insert into cat (cat_id,name,value) values ("1","name3", "3");
  10. insert into cat (cat_id,name,value) values ("1","name4", "4");
  11. insert into cat (cat_id,name,value) values ("2","name5", "5");
  12. insert into cat (cat_id,name,value) values ("2","name6", "6");
  13. insert into cat (cat_id,name,value) values ("2","name7", "7");
  14. insert into cat (cat_id,name,value) values ("2","name8", "8");
  15. insert into cat (cat_id,name,value) values ("3","name9", "9");
  16. insert into cat (cat_id,name,value) values ("3","name10","10");
  17. insert into cat (cat_id,name,value) values ("3","name11","11");
  18. insert into cat (cat_id,name,value) values ("3","name12","12");
  19. mysql> select *from cat;
  20. +----+--------+-------+--------+
  21. | id | cat_id | value | name |
  22. +----+--------+-------+--------+
  23. | 1 | 1 | 1 | name1 |
  24. | 2 | 1 | 2 | name2 |
  25. | 3 | 1 | 3 | name3 |
  26. | 4 | 1 | 4 | name4 |
  27. | 5 | 2 | 5 | name5 |
  28. | 6 | 2 | 6 | name6 |
  29. | 7 | 2 | 7 | name7 |
  30. | 8 | 2 | 8 | name8 |
  31. | 9 | 3 | 9 | name9 |
  32. | 10 | 3 | 10 | name10 |
  33. | 11 | 3 | 11 | name11 |
  34. | 12 | 3 | 12 | name12 |
  35. +----+--------+-------+--------+
  36. 12 rows in set (0.13 sec)
查询分组最大记录

</>复制代码

  1. // 默认取分组第一条
  2. mysql> select *from cat group by cat_id order by cat_id;
  3. +----+--------+-------+-------+
  4. | id | cat_id | value | name |
  5. +----+--------+-------+-------+
  6. | 1 | 1 | 1 | name1 |
  7. | 5 | 2 | 5 | name5 |
  8. | 9 | 3 | 9 | name9 |
  9. +----+--------+-------+-------+
  10. 3 rows in set (0.00 sec)
  11. mysql> select *from (select *from cat order by value desc) a group by cat_id;
  12. +----+--------+-------+--------+
  13. | id | cat_id | value | name |
  14. +----+--------+-------+--------+
  15. | 4 | 1 | 4 | name4 |
  16. | 8 | 2 | 8 | name8 |
  17. | 12 | 3 | 12 | name12 |
  18. +----+--------+-------+--------+
  19. 3 rows in set (0.06 sec)
  20. mysql> select a.* from cat a where value = (select max(value) from cat where cat
  21. _id = a.cat_id) order by a.cat_id;
  22. mysql> select a.* from cat a,(select cat_id,max(value) value from cat group by cat_id) b where a.cat_id = b.cat_id and a.value = b.value order by a.cat_id;
  23. mysql> select a.* from cat a inner join (select cat_id, max(value) value from cat group by cat_id) b on a.cat_id= b.cat_id and a.value= b.value order by a.cat_id;
  24. +----+--------+-------+--------+
  25. | id | cat_id | value | name |
  26. +----+--------+-------+--------+
  27. | 4 | 1 | 4 | name4 |
  28. | 8 | 2 | 8 | name8 |
  29. | 12 | 3 | 12 | name12 |
  30. +----+--------+-------+--------+
  31. 3 rows in set (0.00 sec)
分组前 3 条记录

</>复制代码

  1. mysql> select a.* from cat a where exists (select count(*) from cat where cat_id= a.cat_id and value > a.value having Count(*) < 3) order by a.cat_id,a.value desc;
  2. mysql> select *from cat a where (select count(*) from cat b where a.cat_id=b.cat_id and b.value>a.value) < 3 order by a.cat_id,a.value desc;
  3. +----+--------+-------+--------+
  4. | id | cat_id | value | name |
  5. +----+--------+-------+--------+
  6. | 4 | 1 | 4 | name4 |
  7. | 3 | 1 | 3 | name3 |
  8. | 2 | 1 | 2 | name2 |
  9. | 8 | 2 | 8 | name8 |
  10. | 7 | 2 | 7 | name7 |
  11. | 6 | 2 | 6 | name6 |
  12. | 12 | 3 | 12 | name12 |
  13. | 11 | 3 | 11 | name11 |
  14. | 10 | 3 | 10 | name10 |
  15. +----+--------+-------+--------+
  16. 9 rows in set (0.15 sec)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25550.html

相关文章

发表评论

0条评论

elisa.yang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<