Я хочу получить сумму группы A и B отдельно и разделить каждую на общую сумму.
Я пытался использовать это:
select name, sum(qt)
from ntbl
group by name
номер заказа | название | кварт |
---|---|---|
1 | А | 12 |
2 | А | 20 |
3 | Б | 33 |
4 | Б | 45 |
Результат должен быть таким:
название | кварт | дв |
---|---|---|
А | 32 | 0,29 |
Б | 78 | 0,70 |
Вы можете комбинировать агрегатные и оконные функции вместе:
select name
, sum(qt) as sum_qt
, sum(qt) / sum(sum(qt)) over () * 100 as pct_qt
from t
group by name
вы не можете, вам нужен еще один внешний запрос, одно преимущество оконных функций
Смотрите пересмотренный ответ. «Сверх» является частью делителя.
Вы можете перекрестно присоединиться к другому подзапросу, который суммирует все количества
CREATE TABLE ntbl ( `order_id` INTEGER, `name` VARCHAR(1), `qt` INTEGER ); INSERT INTO ntbl (`order_id`, `name`, `qt`) VALUES ('1', 'A', '12'), ('2', 'A', '20'), ('3', 'B', '33'), ('4', 'B', '45');
SELECT name, sum_name, ROUND(sum_name/sum_qt,2) as dv FROM (select name,SUM(qt) sum_name from ntbl group by name) q1 CROSS JOIN (SELECT SUM(`qt`) sum_qt FROM ntbl) q2
name | sum_name | dv :--- | -------: | ---: A | 32 | 0.29 B | 78 | 0.71
дб <> рабочий пример здесь
поэтому, если я хочу умножить ratio_qt на 100, как это сделать, я сделал так, но не работал `` сумма (qt) / сумма (сумма (qt)) * 100 больше () as ratio_qt``