Использование SQL для обработки% случаев определенного события - PullRequest
0 голосов
/ 19 июня 2019

Надеюсь, вы мне поможете, обычно я занимаюсь анализом в R и базовыми запросами в SQL и опутал себя тем, что кажется основной проблемой.

У меня есть базовая таблица: таблица

ID    product  % discount (int)

1      a         10
2      a         0
3      a         5
4      b         0
5      b         5
6      b         5
7      c         0

Я хочу рассчитать процент от скидки, если она применяется к товару. Я перепробовал несколько подходов, все из которых либо показывают неправильные значения, либо ошибки, и я не уверен, что это синтаксис или подход основан.

Примеры ошибочного кода ниже, хотя, пожалуйста, дайте мне знать, если есть более простой способ.

Я хочу рассчитать% от суммы скидки, если она применяется к товару. Я перепробовал несколько подходов, все из которых либо показывают неправильные значения, либо ошибки, и я не уверен, что это синтаксис или подход основан.

SELECT count(discount) as discountN where discount > 0,
       count(discountN) * 100.0 / (select count(product_id) from table) as percent
FROM table
group by ID

с общим количеством избранных (*) как общим из таблицы выберите количество (скидка) / всего ГДЕ скидка> 0 С таблицы сгруппировать по ID

Я ожидаю:

a: 66%
b: 66%
c: 0%

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Если вы хотите, чтобы соотношение со скидками было больше 0, тогда я рекомендую avg():

SELECT product,
       AVG(CASE WHEN discount > 0 THEN 1.0 ELSE 0 END) as ratio
FROM table
GROUP BY product;

Если вы хотите значения от 0 до 100, а не от 0 до 1, тогда используйте 100.0чем 1.0.

В MySQL это можно упростить до:

SELECT product,
       AVG( discount > 0 ) as ratio
FROM table
GROUP BY product;
0 голосов
/ 19 июня 2019

Вы можете попробовать ниже, используя case when

SELECT product,
       (count(case when discount > 0 then discount end) * 100.0) / count(product_id) as percent
FROM table
group by product
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...