这个是字段下的值
就是怎么写一条sql语句查询一个字段下某个值的占比情况
可以先sql查询出各阶段汇总数据,然后程序中将各个汇总数据和总数据相除,计算出百分比返回给前端,如果对你有所帮助的话,希望能够被采纳
SELECT
COUNT(
CASE
WHEN member_count <= 30
THEN 1
END
) AS count_1,
COUNT(
CASE
WHEN member_count > 30
AND member_count <= 40
THEN 1
END
) AS count_2,
COUNT(
CASE
WHEN member_count > 40
AND member_count <= 50
THEN 1
END
) AS count_3,
COUNT(
CASE
WHEN member_count > 50
AND member_count <= 60
THEN 1
END
) AS count_4,
COUNT(
CASE
WHEN member_count > 60
AND member_count <= 70
THEN 1
END
) AS count_5,
COUNT(
CASE
WHEN member_count > 70
AND member_count <= 80
THEN 1
END
) AS count_6,
COUNT(
CASE
WHEN member_count > 80
AND member_count <= 90
THEN 1
END
) AS count_7,
COUNT(
CASE
WHEN member_count > 90
AND member_count <= 100
THEN 1
END
) AS count_8
FROM xxx;
计算一个全局count和一个分组count就是,只是SQL怎么写简单一点,写两个子查询
select count(famkd) from table
select famkd, count(1) from table group by famkd
然后做一个full join 直接算两个count比例完事
case when
先说明下数据库类型及版本,不同的数据库可以使用的函数有区别,
另外,你最好说明一下你的目标格式是怎样的
不直接上代码的原因是你提供的信息不全,
其实压根就不需要写得那么长,通用的,按 (除以10取个整) 来进行分组count就完了,
select count(1) 统计数,
floor(a/10) 分组
from t group by floor(a/10)
如果需要调整截断点以及输出格式
select count(1) 统计数,
concat(floor((a+1)/10)*10+1,'-',floor((a+1)/10)*10,'%')
分组
from t group by concat(floor((a+1)/10)*10+1,'-',floor((a+1)/10)*10,'%')
如果是oracle,还可以用更高级的WIDTH_BUCKET函数
在hive里或者其他数据库里甚至还有更多方案,以后提问sql一定要记得说清楚自己的数据库以及版本