怎么写一条sql语句查询出一个字段下不同情况的占比

这个是字段下的值

img


然后写一条情况让他这样显示出来

img

就是怎么写一条sql语句查询一个字段下某个值的占比情况

可以先sql查询出各阶段汇总数据,然后程序中将各个汇总数据和总数据相除,计算出百分比返回给前端,如果对你有所帮助的话,希望能够被采纳

img

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)

img

如果需要调整截断点以及输出格式

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,'%')

img

如果是oracle,还可以用更高级的WIDTH_BUCKET函数

img

在hive里或者其他数据库里甚至还有更多方案,以后提问sql一定要记得说清楚自己的数据库以及版本