Queries Quality and Percentage LeetCode Solution

Last updated on October 9th, 2024 at 10:14 pm

This Leetcode problem Queries Quality and Percentage LeetCode Solution is done in SQL.

List of all LeetCode Solution

Level of Question

Easy

Queries Quality and Percentage LeetCode Solution

Queries Quality and Percentage LeetCode Solution

Problem Statement

Column NameType
query_namevarchar
resultvarchar
positionint
ratingint
Table: Queries

This table may have duplicate rows.
This table contains information collected from some queries on a database.
The position column has a value from 1 to 500.
The rating column has a value from 1 to 5. Query with rating less than 3 is a poor query.

We define query quality as:
The average of the ratio between query rating and its position.

We also define poor query percentage as:
The percentage of all queries with rating less than 3.

Write a solution to find each query_name, the quality and poor_query_percentage. Both quality and  poor_query_percentage should be rounded to 2 decimal places.

Return the result table in any order.

The result format is in the following example.

Example 1:
Input:

query_name resultpositionrating
DogGolden Retriever15
DogGerman Shepherd25
DogMule2001
CatShirazi52
CatSiamese33
CatSphynx74
Queries table:

Output:

query_namequality poor_query_percentage
Dog2.5033.33
Cat0.6633.33

Explanation:
Dog queries quality is ((5 / 1) + (5 / 2) + (1 / 200)) / 3 = 2.50
Dog queries poor_ query_percentage is (1 / 3) * 100 = 33.33
Cat queries quality equals ((2 / 5) + (3 / 3) + (4 / 7)) / 3 = 0.66
Cat queries poor_ query_percentage is (1 / 3) * 100 = 33.33

1. Queries Quality and Percentage LeetCode Solution MySQL

select 
  q.query_name, 
  round(
    ifnull(
      avg(rating / position), 
      0
    ), 
    2
  ) as quality, 
  round(
    ifnull(
      cnt / count(q.rating) * 100, 
      0
    ), 
    2
  ) as poor_query_percentage 
from 
  Queries as q 
  left join (
    select 
      query_name, 
      count(*) as cnt 
    from 
      Queries 
    where 
      rating < 3 
    group by 
      query_name
  ) as p on q.query_name = p.query_name 
group by 
  q.query_name;

2. Queries Quality and Percentage LeetCode Solution MySQL (Another approach)

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 
group by 
  query_name;
Scroll to Top