Как сортировать этотSQL сортировка по данным сумма подгруппы
a 1 15
a 2 3
a 3 34
b 1 55
b 2 44
b 3 8
, чтобы (по сумме третьего столбца):
b 1 55
b 2 44
b 3 8
a 1 15
a 2 3
a 3 34
, так как (55 + 44 + 8)> (15 + 3 + 34)
Как сортировать этотSQL сортировка по данным сумма подгруппы
a 1 15
a 2 3
a 3 34
b 1 55
b 2 44
b 3 8
, чтобы (по сумме третьего столбца):
b 1 55
b 2 44
b 3 8
a 1 15
a 2 3
a 3 34
, так как (55 + 44 + 8)> (15 + 3 + 34)
Если вы используете SQL Server/Oracle/Postgresql можно использовать оконный SUM
:
SELECT *
FROM tab
ORDER BY SUM(col3) OVER(PARTITION BY col) DESC, col2
Выход:
╔═════╦══════╦══════╗
║ col ║ col2 ║ col3 ║
╠═════╬══════╬══════╣
║ b ║ 1 ║ 55 ║
║ b ║ 2 ║ 44 ║
║ b ║ 3 ║ 8 ║
║ a ║ 1 ║ 15 ║
║ a ║ 2 ║ 3 ║
║ a ║ 3 ║ 34 ║
╚═════╩══════╩══════╝
Вы можете сделать это с помощью функции стандартного окна ANSI. Я предпочитаю использовать подзапрос, хотя это не является строго необходимым:
select col1, col2, col3
from (select t.*, sum(col3) over (partition by col1) as sumcol3
from t
) t
order by sumcol3 desc, col3 desc;
... и пример того, как сделать это без оконных функций, например в MySQL (но и практически в любой другой стандартной версии SQL)
SELECT m.col1, m.col2, m.col3
FROM myTable m
JOIN (
SELECT col1, SUM(col3) groupsum FROM myTable GROUP BY col1
) z ON m.col1 = z.col1
ORDER BY z.groupsum DESC, col2;
В принципе, рассчитать сумму группы в подзапросе и соединить/заказать результаты по сумме суммы группы.
Школьная работа, или рабочая задача, или просто для удовольствия? – jarlh