新手求教,sql 查询分段区间不确定能否进行查询

柳后声 2018-11-09 09:33:50
新手求教,成绩表数据库有两个字段,stuid 和 score
分数为1~400不等,里面有数据若干,stuid不重复
如何写一个查询,查询结果为根据分数分段查询成绩数(每10分一个档,档数根据实际存在分数显示,如果某个10分档内无成绩则不显示这个档)
结果预想如下:

score | 1-10 10-20 40-50 110-120 320-330
count | 10 5 19 2 21


目前想用mybatis做这个练习。。
...全文
120 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
柳后声 2018-11-09
  • 打赏
  • 举报
回复
引用 4 楼 mingqing6364 的回复:
尽可能不要搞动态数量的列,如果一定要,只能动态拼SQL,性能大降、复杂度大增
厉害厉害交分了
mingqing6364 2018-11-09
  • 打赏
  • 举报
回复
#5说的对,是我没考虑周全,后面的应该+10
  • 打赏
  • 举报
回复
引用 3 楼 mingqing6364 的回复:
select
  concat( floor((score-1)/10) * 10 + 1, '-', floor((score-1)/10) * 10 + 9) as score,
  count(*) `count`
from
  t1
group by
  floor((score-1)/10)
厉害 小小修改一下: select concat( floor((fs)/10) * 10 , '-', floor((fs)/10) * 10 + 10) as score, count(*) `count` from test group by floor((fs)/10) 左闭右开:取>=0 and <10 >=10 and <20
mingqing6364 2018-11-09
  • 打赏
  • 举报
回复
尽可能不要搞动态数量的列,如果一定要,只能动态拼SQL,性能大降、复杂度大增
mingqing6364 2018-11-09
  • 打赏
  • 举报
回复
select
concat( floor((score-1)/10) * 10 + 1, '-', floor((score-1)/10) * 10 + 9) as score,
count(*) `count`
from
t1
group by
floor((score-1)/10)
柳后声 2018-11-09
  • 打赏
  • 举报
回复
当然这是最直观的方法
但我的意思是,区间段太多没办法自定义的情况下,该怎么做。。
二月十六 2018-11-09
  • 打赏
  • 举报
回复
select 
'count' as score,
sum(case when score between 1 and 10 then 1 else 0 end) as `1-10`,
sum(case when score between 11 and 20 then 1 else 0 end) as `11-20`,
sum(case when score between 21 and 30 then 1 else 0 end) as `21-30`,
sum(case when score between 31 and 40 then 1 else 0 end) as `31-40`,
sum(case when score between 41 and 50 then 1 else 0 end) as `41-50`
from t1_1


56,681

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧