SQL рассчитать процент в особом случае - PullRequest
0 голосов
/ 06 октября 2018
select 
    RESTAURANT, 
    RANK, 
    (select count(SCORE) 
     from TRIPADVISOR 
     where score = 4) as totalfour, 
    (select count(*) 
     from TRIPADVISOR) as total   
from 
    TRIPADVISOR 

Я знаю, что есть средняя функция для SQL.У меня вопрос, что у меня есть таблица TRIPADVISOR, которая состоит из столбцов имен Ресторана, ранг (1-10), SCORE, просмотренных клиентами (1-5).Я хочу посчитать процент от общего количества людей, которые дали 4 балла за общее количество элементов, которое будет считаться ().Как я смогу это сделать?У меня есть его, где я делаю два подзапроса в предложении select, которое показывает общее количество людей, которые дали 4, и общее количество записей, которое считается (), а также список имен Resturant и всех рангов.,Благодарю.

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Если вы хотите это для ресторана:

select restaurant,
       avg(case when score = 4 then 1.0 else 0 end) as avg_4
from TRIPADVISOR 
group by restaurant;

Если вы хотите это для всей базы данных:

select avg(case when score = 4 then 1.0 else 0 end) as avg_4
from TRIPADVISOR ;

Если вы хотите, чтобы это добавлялось в каждую строку, тогда используйте оконные функции:

select restaurant,
       avg(case when score = 4 then 1.0 else 0 end) over (partition by restaurant) as avg_4_restaurant,
       avg(case when score = 4 then 1.0 else 0 end) over () as avg_4_overall
from TRIPADVISOR ;
0 голосов
/ 06 октября 2018

Можно попробовать с подсчитанным CASE

SELECT
 RESTAURANT, 
 RANK, 
 ((COUNT(CASE WHEN score = 4 THEN 1 END) * 1.0) / COUNT(*))*100 AS PercentageScore4
FROM TRIPADVISOR
GROUP BY RESTAURANT, RANK;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...