Разделите сумму каждой группы на общую сумму

Я хочу получить сумму группы A и B отдельно и разделить каждую на общую сумму.

Я пытался использовать это:

select name, sum(qt)
from ntbl
group by name 
номер заказаназваниекварт
1А12
2А20
3Б33
4Б45

Результат должен быть таким:

названиеквартдв
А320,29
Б780,70
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
0
49
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете комбинировать агрегатные и оконные функции вместе:

select name
     , sum(qt) as sum_qt
     , sum(qt) / sum(sum(qt)) over () * 100 as pct_qt
from t
group by name

поэтому, если я хочу умножить ratio_qt на 100, как это сделать, я сделал так, но не работал `` сумма (qt) / сумма (сумма (qt)) * 100 больше () as ratio_qt``

rh2o 15.03.2022 21:34

вы не можете, вам нужен еще один внешний запрос, одно преимущество оконных функций

nbk 15.03.2022 21:49

Смотрите пересмотренный ответ. «Сверх» является частью делителя.

Salman A 15.03.2022 22:03

Вы можете перекрестно присоединиться к другому подзапросу, который суммирует все количества

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

дб <> рабочий пример здесь

Другие вопросы по теме