Рассчитать процент по группам на основе значений в одном столбце - PullRequest
0 голосов
/ 16 марта 2020

Извиняюсь за базовый c вопрос, я не смог найти ответ после поиска.

Простая таблица с 2 столбцами car_type и event . Каждый раз, когда клиент спрашивает об автомобиле, в таблицу заносится запись, и событие = "запрашивать". Если этот тип автомобиля куплен, вставляется запись события = "куплено".

Как рассчитать, какой тип автомобиля является наиболее успешным, исходя из # купленного / # запрашиваемого? Конечно, сгруппированы по типу машины.

Я пробовал

select car_type, 
      ((select count(*) from TABLE where event = "bought" ) / 
       (select count(*) from alerts where event = "inquire") * 100.0) as percentage
from TABLE 
group by car_type;

, но это не сработало.

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 16 марта 2020

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

SELECT car_type, 100.0 * bought / inquiries AS percentage
FROM (
    SELECT car_type,
           SUM(event = 'bought') AS bought,
           SUM(event = 'inquire') AS inquiries
    FROM alerts
    GROUP BY car_type
) c
ORDER BY percentage DESC
LIMIT 1
1 голос
/ 16 марта 2020

Вы можете использовать условное агрегирование:

select car,
       (sum( event = 'bought') /
        sum( event = 'inquire' )
       ) as bought_inquire_ratio
from t
group by car;

Если вы просто хотите купить общее соотношение, вы можете использовать:

select car,
       avg( event = 'bought' )
from t
group by car;
...