MySql中group by, order by,按照出现频率排序
2015-10-02 12:18
691 查看
#环境及运行[0],示例表结构: CREATE TABLE t ( val int, name char(10) );
#表中数据: INSERT INTO t (val, name) VALUES (10, 'xyb'), (20, 'xyb'), (30, 'charlotte'), (40, 'xyb'), (50, 'charlotte'), (60, 'charlotte'), (70, 'xyb'), (80, 'xl'), (90, 'xyb'), (100, 'xl'), (110, 'charlotte'), (120, 'bozai'), (130, 'charlotte'), (140, 'xyb'), (150, 'bozai'), (160, 'xl'), (170, 'xl'), (180, 'bozai'), (190, 'charlotte'), (200, 'xyb'), (210, 'xyb'), (220, 'love'), (230, 'love'), (240, 'bozai'), (250, 'xyb'), (260, 'charlotte'), (270, 'xl'), (280, 'charlotte'), (290, 'xl'), (300, 'love');
group by 对查询到的记录按照某个列进行归类,输出该列值第一次出现的值对应的记录,默认对该列进行升序排列。
SELECT name, val FROM t GROUP BY name
输出结果:
name | val |
---|---|
bozai | 120 |
charlotte | 30 |
love | 220 |
xl | 80 |
xyb | 10 |
SELECT name, val FROM t ORDER BY name DESC;
查询结果:
name | val |
---|---|
xyb | 10 |
xyb | 200 |
xyb | 90 |
xyb | 210 |
xyb | 70 |
xyb | 250 |
xyb | 40 |
xyb | 20 |
xyb | 140 |
xl | 270 |
xl | 290 |
xl | 170 |
xl | 160 |
xl | 80 |
xl | 100 |
love | 300 |
love | 230 |
love | 220 |
charlotte | 190 |
charlotte | 30 |
charlotte | 280 |
charlotte | 50 |
charlotte | 260 |
charlotte | 60 |
charlotte | 110 |
charlotte | 130 |
bozai | 240 |
bozai | 150 |
bozai | 120 |
bozai | 180 |
处理的是 group by 选择之后的记录。查询语句:
SELECT name, val FROM t GROUP BY name ORDER BY val DESC;
查询结果:
name | val |
---|---|
love | 220 |
bozai | 120 |
xl | 80 |
charlotte | 30 |
xyb | 10 |
SELECT val, name , count(*) AS cnt FROM t GROUP BY name having cnt > 6 ORDER BY val DESC;
返回相同 name 值出现过超过6次的记录,并对这些记录按照 val 的值进行降序排序。查询结果:
val | name | cnt |
---|---|---|
30 | charlotte | 8 |
10 | xyb | 9 |
SELECT val, name , count(*) AS cnt FROM t GROUP BY name ORDER BY cnt DESC;
查询结果:
val | name | cnt |
---|---|---|
10 | xyb | 9 |
30 | charlotte | 8 |
80 | xl | 6 |
120 | bozai | 4 |
220 | love | 3 |
SELECT DISTINCT t.name, t2.cnt cnt FROM t INNER JOIN ( SELECT name, COUNT(*) AS cnt FROM t GROUP BY name ) t2 ON ( t2.name = t.name ) ORDER BY t2.cnt DESC;
查询结果:
name | cnt |
---|---|
xyb | 9 |
charlotte | 8 |
xl | 6 |
bozai | 4 |
love | 3 |
[0]http://sqlfiddle.com/#!2/4123be/4
[1]http://stackoverflow.com/questions/8100239/mysql-order-by-count
[2]http://stackoverflow.com/questions/2283305/order-by-count-per-value
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复