优质房源的查询办法(如何找到优质房源?)
【面试题】
评分表里记录了各个城市房源的评分,包括房源号、城市、分数。
为了帮助用户根据评分找到优质房源,现在领导要你找出分数(满分10分)在0-5分,5-7分,7-9分,9分及以上分别有多少。
【解题思路】
1.拆解问题
使用逻辑树分析方法来拆解问题求分数在0-5分,5-7分,7-9分,9分及以上分别有多少
1)将评分表按照分数进行分组,按照0-5分,5-7分,7-9分,9分四个区间进行分组
2)再对每个区间的房源进行计数
2.如何按条件拆分成多个组呢?
根据分数所在的区间进行分组,以下是一个简单的示意图
这里会有两个常见的误区
1)分组就想到用group by,在这里是不行的。
因为平时使用groupby分组的字段是我们直接用的字段,而这里的分数并不是我们最终分组的区间字段0-5、5-7这样。
如果直接用分组(group by),就会把相同的分数分为一组,与我们要求的分数段是不相符的。
2)看到条件就想到用where,在这里是多条件的情况。如果我们使用where分数<5 那么分数大于5的房源就无法统计到
3.如何实现多条件判断呢?
涉及到“多条件判断”的问题,要想到《猴子从零学会SQL》里讲过的条件判断语句case when,完整的用法如下
翻译过来就是 当字段1 >值1,取新值1 ;当字段1 <值1,取新值2;当字段1 =值1,取新值3
方法一
使用四个case when就把原表分成了4个部分,省略了else,当符合条件就取房源号放入对应的字段中
在上面代码的基础上再加上计数函数 count即可,完整SQL如下
查询结果
方法二
有同学会问,为什么不像示例一样用1个case when,而用4个case when呢?
如果用一个case when是这样的
这样取出来的是一个字段,我们就没法区分各个组的个数。
如果要使用这种方法的话我们可以在then后面做点文章,直接将分数转化为分数区间。
这样就相当于把分数用分数段来进行表示,实际结果如下图
针对这个查询结果在外层加一个查询根据区间group by即可。
查询结果
【本题考点】
多条件判断分组类型的问题,要想到用多条件判断case解决
【举一反三】
下图是学生考试的成绩表,求各科不及格(<60)、及格(60-80)、优秀(80 )的人数
参考答案
查询结果
推荐如何从零学会SQL?
游泳培训
- 奥运赛事动态:最新消息更新
- 小托马斯臀部手术在即,赛季报销前景堪忧
- 恩比德表现低迷,全场仅得11分刷新季后赛生涯得
- 勇士半场仅得33分遭落后,半场落后最大分差,无
- 钱德勒与保罗竞争者的真实面貌,如何应对他们
- 理查兹:图赫尔是一位出色的教练,也是证明过
- 锡安计划留鹈鹕,把握时光备战新赛季
- 霍尔告别莱斯特城:我过去17年的时光都奉献给了
- 奥萨苏纳vs塞尔塔比分预测
- 小牛迎战火箭,哈登率队展现强势横扫比赛前瞻
- 爱德华兹的成长转折科尔的激励与我自身的改变
- 篮板&助攻新高小萨遵循严格饮食计划面包、酸
- 骑士险胜避免76人连胜,勒布朗卓越表现对抗厄文
- 詹姆斯:降薪可以让湖人避免触发第二土豪线我
- 海港队客场10战胜对手,希望海港将士们再接再厉
- 布克在季后赛的关键回合一球决胜胜负手