首页 > 数据库 >sql 牛客网 175题

sql 牛客网 175题

时间:2023-09-17 17:55:22浏览次数:30  
标签:null grade driver id 牛客 sql 175 avg order

https://www.nowcoder.com/practice/f022c9ec81044d4bb7e0711ab794531a?tpId=268&tags=&title=&difficulty=0&judgeStatus=0&rp=0&sourceUrl=%2Fexam%2Fintelligent%3FquestionJobId%3D10%26tagId%3D21003

题本身的思路并不难,我的方法是采用union 连接两个查询

( select driver_id, round(avg(grade), 1) as avg_grade 
from tb_get_car_order 
where driver_id in ( 
select driver_id
from tb_get_car_order 
where start_time is null 
and date_format(order_time, "%Y%m") ='202110' 
)
group by driver_id 
order by driver_id 
) 
union 
( 
select '总体' as driver_id,
round(avg(grade), 1) as avg_grade
from tb_get_car_order
where driver_id in (
    select driver_id 
    from tb_get_car_order
    where start_time is null 
    and date_format(order_time, '%Y%m') = '202110'
) ) 

看了评论区的题解后发现另一种解法:

select coalesce(driver_id, '总体'), 
round(avg(grade), 1) as avg_grade 
from tb_get_car_order 
where driver_id in 
(
select driver_id 
from tb_get_car_order 
where date_format(order_time, '%Y%m')='202110' and start_time is null 
) 
group by driver_id 
with rollup;

  coalesce 函数会将第一个为null的数替换成 总体

colaesce(driver_id, '总体') 本身不会计算总体的平均分,实际上可以计算出总体平均分是因为使用了 with rollup 关键字

rollup 在分组之后会计算出一个总体的平均分,显示为null 

driver_id | avg_grade
----------|----------
1 | 4.5
2 | 5.5
3 | 4.0
NULL | 4.6

所以当 sql 查询的时候使用 coalesce(driver_id, 总体)的时候 函数会将 null替换为总体

driver_id | avg_grade
----------|----------
1 | 4.5
2 | 5.5
3 | 4.0
总体 | 4.6

标签:null,grade,driver,id,牛客,sql,175,avg,order
From: https://www.cnblogs.com/yuhao0451/p/17709337.html

相关文章

  • mysql中的锁
    记录下mysql中的各种锁这些锁的效果的验证要在linux上安装mysql进行测试,如果在本地windows上装mysql有可能不会出现锁的互斥效果。本文使用的mysql版本是5.6一、全局锁全局锁锁的是整个数据库实例,加上全局锁后整个数据库实例下的所有数据库中的所有表都只能进行查询,包括当前......
  • SQL 比较两个表的数据内容是否相同
    SELECTCOUNT(*)FROM(SELECT*FROMtable1UNIONSELECT*FROMtable2)AScombinedGROUPBYcolumn1,column2,...;我们首先将两个表的数据内容进行UNION操作,然后使用GROUPBY对结果进行分组,并统计每个分组的数量。如果返回的分组数量为1,则说明两个......
  • 在MySQL 5.7中使用DECLARE语句的注意事项
    在MySQL执行以下SQL报错DELIMITER//CREATEPROCEDUREgenerate_and_insert_data()BEGINDECLAREiINTDEFAULT1;DECLAREjINTDEFAULT1;DECLAREtotal_iterationsINTDEFAULT1000;WHILEi<=total_iterationsDO--创建临时表用于存储生成......
  • Linux平台卸载MySQL总结
     如何在Linux下卸载MySQL数据库呢?下面总结、整理了一下Linux平台下卸载MySQL的方法。MySQL的安装主要有三种方式:二进制包安装(UsingGenericBinaries)、RPM包安装、源码安装。对应不同的安装方式,卸载的步骤有些不同。文章中如有不足或不对的地方,敬请指出或补充! RPM包安装方......
  • SQL——数据控制语言DCL(GRANT,REVOKE,COMMIT,ROLLBACK)
    DCL数据控制语言(DataControlLanguage,DCL)在SQL语言中,是一种可对数据访问权进行控制的指令,它可以控制特定用户账户对数据表、查看表、存储程序、用户自定义函数等数据库对象的控制权。GRANT授权 GRANT权限1,…,权限nON数据库.*TO用户名@IP地址  // 权限、用户、数据......
  • 如何修改MySQL数据库名称
    需求比如数据库名称old_db想改名为new_dbMySQL修改数据库名称比较麻烦,不支持直接修改,需要通过其它方式间接达到修改数据库名称的目的。在MySQL5.1.23之前的旧版本中,我们可以使用RENAMEDATABASE来重命名数据库,但此后版本,因为安全考虑,删掉了这一命令。先导出数据,再导入数......
  • pg小工:pgsql介绍
    pg小工:pgsql介绍介绍世界上最先进的开源数据库设计灵活,可定制支持ANSI/ISO兼容的SQL已经有30多年发展历史universitypostgres(1986-1993)postgres95(1994-1995)postgressql(1996-2019)有活跃在全球范围内的社区支持支持邮件列表http://www.postgresql.org/community/lis......
  • 从0开始搭建SQL Server AlwaysOn
    从0开始搭建SQLServerAlwaysOn   第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnblogs.com/lyhabc/p/4682028.html第三篇http://www.cnblogs.com/lyhabc/p/4682986.html第四篇http://www.cnblogs.com/lyhabc/p/6136227.html搭建非域AlwaysOnwin2......
  • 分享攒了多年的mssql脚本
    分享攒了多年的mssql脚本 分享攒了多年的mssql脚本脚本类别包括:备份还原表分区常用函数错误日志定时自动抓取耗时SQL并归档发邮件脚本模块镜像批量脚本数据库收缩数据库损坏数据库账号统计数据库大小性能作业脚本数量:54个 github地址:https://github.com/xiaohuazi123/ms......
  • SQL Server内置的HTAP技术
    SQLServer内置的HTAP技术 SQLServer内置的HTAP技术目录背景SQLServer在OLAP上的发展SQLServer的初代HTAPSQLServer逐渐增强的HTAPSQLServer列存总结HTAP发展   背景2005年,Gartner正式提出了HTAP这一概念,并且迅速引起了一些企业的关注,被视为是未来数据......