1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT
字段名,
n,
round( n / s * 100, 5 ) rat
FROM (
SELECT * FROM(
SELECT 字段名, count( 1 ) n FROM sendsms_log
GROUP BY 字段名
) t1
INNER JOIN (
SELECT count( 1 ) s FROM sendsms_log
) t2
ON 1 = 1
) t

where条件在两个最里面的 from后,都要加上,否则百分比不准确

四舍五入:round 函数

末尾加百分号:concat(num, ‘%’)

中文按拼音排序:

Oracle用函数 nlssort

MySQL:
编码为latin1_swedish_ciorder by birary(字段名) asc
编码为 utf8_general_ciORDER BY CONVERT( 字段名 USING gbk ) COLLATE gbk_chinese_ci ASC

自定义枚举类型排序:
order by field( name, ‘value1’, ‘value2’ )


示例:研究土壤对生长势的影响

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
select
土壤名称,
生长势,
n 数量,
concat(round( n / s * 100, 2 ),'%') 百分比
from (
select * from (
select 土壤名称, 生长势, count(1) n from `linan`
-- where 生长场所='乡村'
group by 土壤名称,生长势
order by convert( 土壤名称 using gbk ) collate gbk_chinese_ci asc
) t1 -- 各分类数
inner join (
select count(1) s from `linan`
-- where 生长场所='乡村'
) t2 -- 总数
on 1 = 1
) t
-- order by field(生长势, '正常株', '衰弱株', '濒危株', '死亡株')

显示结果:

土壤名称 生长势 数量 百分比
红壤 正常株 7120 69.95%
黄壤 正常株 2049 20.13%
基性岩土 正常株 1 0.01%
石灰土 正常株 226 2.22%
水稻土 正常株 1 0.01%
紫色土 正常株 4 0.04%
红壤 衰弱株 507 4.98%
黄壤 衰弱株 33 0.32%
石灰土 衰弱株 4 0.04%
黄壤 濒危株 38 0.37%
石灰土 濒危株 1 0.01%
红壤 濒危株 147 1.44%
红壤 死亡株 40 0.39%
黄壤 死亡株 8 0.08%

可通过 union all 来合并多个搜索结果,并且计算每个土壤中各个生长势的百分比,即有各土壤各自都是 100%