SQL

问题

查找积分最高的用户的id,名字,以及他的总积分是多少(可能有多个),查询结果按照id升序排序。

解题

1.需要对积分表进行改写,将type‘reduce’ 的积分(grade_num)变为负数,代码如下:

select user_id,(case when type = 'reduce' then -1*grade_num else grade_num end) jj
from grade_info

这里使用case when…then…else…end,临时表如下:

2.将用户表(user)与上述临时表联立,并使用group by 分组计算每个用户总的积分,按从多到少排序,代码如下:

select id, name,sum(jj) grade_num, rank() over (order by sum(jj) desc) r
from user u join (select user_id,(case when type = 'reduce' then -1*grade_num else grade_num end) jjfrom grade_info
) g on u.id=g.user_id
group by u.id

每个用户总积分及排序如下:

3.只需要得到积分最多的id,name,grade_num;限制条件r=1即可,完整代码如下:

select id,name,grade_num from(select id, name,sum(jj) grade_num, rank() over (order by sum(jj) desc) rfrom user u join (select user_id,(case when type = 'reduce' then -1*grade_num else grade_num end) jjfrom grade_info) g on u.id=g.user_idgroup by u.id
) as t
where r = 1
order by id

最终查询结果如下:

总结

1.使用**case…when…改写数值;
2.分别使用
sum()**求和,**rank()**函数排序;
3.多层嵌套关系逻辑要明确。

牛客网-SQL篇-全部题目-SQL91 获得积分最多的人(三)相关推荐

  1. 【牛客网SQL篇】非技术快速入门

    sql-quick-study 01 基础查询 概念:基础查询 SQL1 查询多列 题目: 现在运营同学想要用户的设备 id 对应的性别.年龄和学校的数据,请你取出相应数据 语法: select 要显 ...

  2. 牛客网SQL篇刷题篇(38-47)

    1.视图:视图是可视化的表. 视图的作用: 第一点:使用视图,可以定制用户数据,聚焦特定的数据. 解释: 在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话, 采购人员,可以需要一些与其有 ...

  3. 牛客网SQL篇刷题篇(32-37)

    https://www.nowcoder.com/ta/sql 1.sql group_contact().concat().concat_ws函数 https://blog.csdn.net/qq_ ...

  4. 牛客网SQL篇刷题篇(16-23)

    https://www.nowcoder.com/ta/sql 1.SQL嵌套查询 https://www.cnblogs.com/glassysky/p/11559082.html (1)什么是嵌套 ...

  5. 牛客网SQL篇刷题篇(24-31)

    https://www.nowcoder.com/ta/sql 1.NOT IN NOT IN运算符允许从结果集中排除特定值的列表. 2.sql子查询 https://www.cnblogs.com/ ...

  6. 牛客网SQL篇刷题篇(3-10)

    https://www.nowcoder.com/ta/sql 1.inner join 和left join (1)在表中存在至少一个匹配时,INNER JOIN 关键字返回行. SELECT ** ...

  7. 牛客网SQL篇刷题篇(1-2)

    https://www.nowcoder.com/ta/sql

  8. 牛客网SQL大厂真题二刷小白白话总结(三)电商场景(某东商城)

    三.电商场景(某东商城) 目录 SQL13 计算商城中2021年每月的GMV(简单) SQL14 统计2021年10月每个退货率不大于0.5的商品各项指标(中等) SQL15 某店铺的各商品毛利率及店 ...

  9. 牛客网SQL题目全部通过答案

    SQL1 查找最晚入职员工的所有信息 select * from employees where hire_date=(select max(hire_date) from employees); S ...

最新文章

  1. Windows PE资源表编程(枚举资源树)
  2. MySQL的索引优化
  3. 多屏互动协议 linux,【Linux系统多屏互动电视】Linux系统多屏互动电视报价及图片大全-列表版-ZOL中关村在线...
  4. Mac安装jdk1.8 / mysql5.7.16 与配置环境变量
  5. 判断一个数能否同时被3和5整除(信息学奥赛一本通-T1046)
  6. asp.net的decimal保留两位小数
  7. 开发实例系列:一、舒尔特方格小游戏,付源码和APK
  8. 易语言大漠插件模块制作使用系统字库找字
  9. 简单、便捷、好用的财务报表制作软件有哪些?这篇就有推荐
  10. 视频插帧算法之光流法
  11. 微信小程序背景图片设置问题
  12. 电力系统104规约帧报文解析
  13. Python利用fitz库提取pdf中的图片(针对多种类型pdf)
  14. 《企业管理学》—战略管理与目标管理知识点总结
  15. cocos creator 横版射击游戏全民吃鸡大战 H5+安卓+IOS三端源码
  16. Linux音乐相册代码,小年糕音乐相册制作下载-小年糕视频编辑appv1.5.8-Linux公社
  17. 如何保护个人信息安全?
  18. 《计算机通信与网络》学习笔记
  19. FL Studio教程之排列和编辑歌曲
  20. 高德地图 根据名称搜索坐标,坐标点呈现列表展示

热门文章

  1. 魔兽世界 - PKU[课程作业]程序设计与算法(三)C++面向对象程序设计/coursera C++程序设计_World of warcraft Project
  2. Java中Map的keySet()、entrySet()详解
  3. vue公众号项目中的橡皮筋效果
  4. [经验教程]微信自动续费服务在哪里怎么关闭微信自动续费?
  5. 论文阅读笔记-FLAT: Chinese NER using Flat-Lattice Transformer
  6. linux火狐怎么清除缓存文件,Firefox缓存文件夹位置设置及清除缓存方法
  7. 《三体》三部曲 读后杂记
  8. 应用程序错误电脑黑屏_为什么电脑一开机就黑屏 说应用程序错误程序不能读,按确定后仍然是黑屏...
  9. php 取出指定值,php取出数组内指定的值
  10. 查找企业微信聊天记录,会话存档有多重要