Там есть пара подходов к получению такого результата.
Вам понадобятся «тотальные» точки со всей таблицы (или любого другого подмножества) и повторяйте их в каждой строке. Получение процента - это простой вопрос арифметики, выражение, которое вы используете для этого, зависит от типов данных и от того, как вы хотите отформатировать.
Вот один из способов (из нескольких возможных способов), чтобы получить указанный результат:
SELECT t.id
, t.code
, t.points
-- , s.tot_points
, ROUND(t.points * 100.0/s.tot_points,1) AS percentage
FROM onetable t
CROSS
JOIN (SELECT SUM(r.points) AS tot_points
FROM onetable r
) s
ORDER BY t.id
Вид запрос s
запускается первым, что дает одну строку. Операция объединения соответствует этой строке с каждой строкой от t
. И это дает нам значения, необходимые для вычисления процента.
Другой способ получить этот результат без использования операции объединения - использовать подзапрос в списке SELECT для возврата итогового значения.
Обратите внимание, что подход объединения может быть расширен для получения процента для каждой «группы» записей.
id type points %type
-- ---- ------ -----
1 sold 11 22%
2 sold 4 8%
3 sold 25 50%
4 bought 1 50%
5 bought 1 50%
6 sold 10 20%
Чтобы получить этот результат, мы можем использовать один и тот же запрос, но аа вид запрос для s
, который возвращает общее GROUP BY r.type
, а затем присоединиться к операции не перекрестное соединение, но матч в зависимости от типа:
SELECT t.id
, t.type
, t.points
-- , s.tot_points_by_type
, ROUND(t.points * 100.0/s.tot_points_by_type,1) AS `%type`
FROM onetable t
JOIN (SELECT r.type
, SUM(r.points) AS tot_points
FROM onetable r
GROUP BY r.type
) s
ON s.type = t.type
ORDER BY t.id
чтобы сделать тот же результат с подзапроса, который будет коррелированных подзапросов, и что подзапрос может получить выполняется для каждой строки в t
.
Вот почему для меня более естественно использовать операцию соединения, а не подзапрос в списке SELECT ... даже когда подзапрос работает одинаково. (Шаблоны, которые мы используем для более сложных запросов, таких как присвоение псевдонимов таблицам, отбор всех ссылок на столбцы и форматирование SQL ... эти шаблоны просто возвращаются к простым запросам. Обоснование этих шаблонов выглядит просто потерянным в простых . запросы)
Какая СУБД вы используете? – DirkNM