首页 > 其他分享 >[每日一练]查询结果的质量和占比(布尔值的灵活使用)

[每日一练]查询结果的质量和占比(布尔值的灵活使用)

时间:2024-08-29 17:50:33浏览次数:13  
标签:rating 灵活 布尔值 Dog Cat query 查询 quality

题目来源于力扣:

1211. 查询结果的质量和占比 - 力扣(LeetCode)

题目要求:

Queries 表: 

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| query_name  | varchar |
| result      | varchar |
| position    | int     |
| rating      | int     |
+-------------+---------+
此表可能有重复的行。
此表包含了一些从数据库中收集的查询信息。
“位置”(position)列的值为 1 到 500 。
“评分”(rating)列的值为 1 到 5 。评分小于 3 的查询被定义为质量很差的查询。
 

将查询结果的质量 quality 定义为:

各查询结果的评分与其位置之间比率的平均值。

将劣质查询百分比 poor_query_percentage 为:

评分小于 3 的查询结果占全部查询结果的百分比。

编写解决方案,找出每次的 query_name 、 quality 和 poor_query_percentage。

quality 和 poor_query_percentage 都应 四舍五入到小数点后两位 。

以 任意顺序 返回结果表。

结果格式如下所示:

 

示例 1:

输入:
Queries table:
+------------+-------------------+----------+--------+
| query_name | result            | position | rating |
+------------+-------------------+----------+--------+
| Dog        | Golden Retriever  | 1        | 5      |
| Dog        | German Shepherd   | 2        | 5      |
| Dog        | Mule              | 200      | 1      |
| Cat        | Shirazi           | 5        | 2      |
| Cat        | Siamese           | 3        | 3      |
| Cat        | Sphynx            | 7        | 4      |
+------------+-------------------+----------+--------+
输出:
+------------+---------+-----------------------+
| query_name | quality | poor_query_percentage |
+------------+---------+-----------------------+
| Dog        | 2.50    | 33.33                 |
| Cat        | 0.66    | 33.33                 |
+------------+---------+-----------------------+
解释:
Dog 查询结果的质量为 ((5 / 1) + (5 / 2) + (1 / 200)) / 3 = 2.50
Dog 查询结果的劣质查询百分比为 (1 / 3) * 100 = 33.33

Cat 查询结果的质量为 ((2 / 5) + (3 / 3) + (4 / 7)) / 3 = 0.66
Cat 查询结果的劣质查询百分比为 (1 / 3) * 100 = 33.33

思路流程:

我们要解决的问题很简单:

  1. 计算所有rating/position的平均值,保留两位小数
  2. 计算所有rating小于3的分数所占的比例,保留两位小数

  • 问题1很好解决:
round(avg(rating/position),2) as quality
  • 但是问题2有些困难。求取坏数据所占百分比很简单,只需要 ROUND(count(bad_rating)/count(rating)*100,2) 即可。但是题中有说明bad_rating的判断条件:rating<3.这个时候就可以李勇IF函数来判断
  • IF函数的语法: IF(布尔判断式,TRUE时返回的数据,FALSE时返回的数据),于是我们可以得到:
    ROUND(AVG(IF(rating<3,1,0))*100,2)

    就可以通过avg函数,去直接计算出它的占比了。因为在IF判断式中:如果不符合条件的话,数据会判断为0,如果符合条件的话,判断为1。联合avg函数,计算出有所有0和1的总和,再除以所有0和1的数量,即可判断出符合条件的数据占总数居的比例了。

  • 当然,也可以直接在计算函数里传入布尔表达式,这会直接将数据进行条件判断,转化为0(FALSE)或1(TRUE),再进行计算,我们可以利用这个特性,将代码简化:

ROUND(AVG(rating<3))*100,2)
  • 最后按照名字进行分组即可。 

代码实现:

# Write your MySQL query statement below
select query_name ,
round(avg(rating/position),2) as quality ,
round(avg(IF(rating<3,1,0))*100,2) as poor_query_percentage
from Queries 
where query_name is not null
group by query_name 

标签:rating,灵活,布尔值,Dog,Cat,query,查询,quality
From: https://blog.csdn.net/2302_77975940/article/details/141639886

相关文章

  • 29:函数查询,添加,修改,删除
    #_*_coding:utf-8_*_importosdeffile_handle(filename,backend_data,record_list=None,type='fetch'):#type:fetchappendchangenew_file=filename+'_new'bak_file=filename+'_bak'iftype=='fetch':......
  • pageHelper分页插件导致的查询慢的问题优化
    首先在yml中配置mybatis:configuration:log-impl:org.apache.ibatis.logging.stdout.StdOutImpl会进行sql语句打印问题:进行分页查询时pageHelper自动生成的count语句相当于在查询语句外包一层selectcount(1)from(你的查询语句)对于你的查询语句的返回条件中有较......
  • ElasticSearch学习笔记(三)RestClient操作文档、DSL查询文档、搜索结果排序
    文章目录前言5RestClient操作文档5.4删除文档5.4修改文档5.5批量导入文档6DSL查询文档6.1准备工作6.2全文检索查询6.3精准查询6.4地理坐标查询6.5复合查询6.5.1相关性算分6.5.2布尔查询7搜索结果处理7.1排序7.1.1普通字段排序7.1.2地理坐标排序......
  • Mybatis-puls中select查询方法报错Can not find table primary key in Class
    1、项目参数springboot2.6.13jdk8Mybatis-Plus3.5.42、问题描述Mybatis-puls中select查询方法报错CannotfindtableprimarykeyinClass,org.apache.ibatis.binding.BindingException:Invalidboundstatement(notfound):com.example.dao.FLowerDao.selectById3、......
  • Mybatis-puls中select查询方法返回为空null
    1、项目参数springboot2.6.13jdk8Mybatis-Plus3.5.42、问题描述在3.5.4版本的MP中使用select方法查询到数据,却返回为空实体类publicclassFlower{@TableId(value="flower_id",type=IdType.INPUT)privateintflower_id;privateStringflower_name;......
  • SAP B1 基础实操 - 查询管理器(基础版)
    一、功能介绍很多时候我们需要将不同表单的信息汇总在一张表格内方便查看,在SAPB1中,我们通过【查询管理器】写SQL代码的方式查询数据并汇总。如上图,在表单中,上半黄底为SQL代码区域,下半灰底表格为根据SQL代码查询得到的结果。本篇以一个简单案例讲述查询管理器的基本......
  • MySQL联表查询
    按功能分内连接等值连接非等值连接自连接外连接左外连接右外连接全外连接交叉连接1.内连接(INNERJOIN)获取所有的员工名和其对应的部门名SELECTe.last_name,d.department_nameFROMemployeeseINNERJOINdepartmentsd ONe.department_id=d.departm......
  • 第42天:WEB攻防-PHP应用&MYSQL架构&SQL注入&跨库查询&文件读写&权限操作 - 快捷方式
    接受的参数值未进行过滤直接带入SQL查询 MYSQL注入:(目的获取当前web权限)1、判断常见四个信息(系统,用户,数据库名,版本)2、根据四个信息去选择方案root用户:先测试读写,后测试获取数据非root用户:直接测试获取数据  #PHP-MYSQL-SQL常规查询获取相关数据:1、数据库版本-看是否......
  • 第五章 表记录的查询(二)
    4、聚合函数查询一、聚合函数(1)COUNT()函数count(*)返回数据表中的记录数(包含NULL值的空行)除count(*)外,其余聚合函数都会忽略空值 substring(被截取的字符串,从第几位开始截取,截取长度)查询图书编号第一位到第五位是97871的行数Selectcount(distinct列名/字段名)from表名;di......
  • 查询权限限制备份
    TSUseruser=ResourceUtil.getSessionUser();Stringdepartid=user.getDepartid();TSDeparttsDepart=systemService.getEntity(TSDepart.class,departid);StringsysOrgCode=tsDepart.getOrgCode();try{//获取用户的......