Простой SQL выберите сумму и значения одного и того же столбца - PullRequest
0 голосов
/ 05 июня 2009

У меня есть сотрудник, который работает над таблицей со столбцом «сумма». Они хотели бы получить первые 5 сумм и сумму сумм в одном запросе.

Я знаю, вы могли бы сделать это:

SELECT TOP 5 amount FROM table 
UNION SELECT SUM(amount) FROM table
ORDER BY amount DESC

Но это дает такие результаты:

1000  (sum)
 100
  70
  50
  30
  20

Когда им действительно нужно это:

100 | 1000
 70 | 1000
 50 | 1000
 30 | 1000
 20 | 1000

Мои интуитивные попытки достичь этого имеют тенденцию сталкиваться с проблемами группировки, что не является такой проблемой, когда вы выбираете другой столбец, но когда вы хотите использовать статистическую функцию на основе выбранного столбца. 1012 *

Ответы [ 4 ]

6 голосов
/ 05 июня 2009

Вы можете использовать CROSS JOIN для этого:

SELECT TOP 5 a.amount, b.sum
FROM table a
CROSS JOIN (SELECT SUM(amount) sum FROM table) b
ORDER BY amount DESC
2 голосов
/ 05 июня 2009

Это может сработать

SELECT TOP 5 amount, (SELECT SUM(amount) FROM table) 
FROM table 
ORDER BY amount DESC
1 голос
/ 05 июня 2009

Другой подход с использованием аналитических функций (SQL Server 2005+):

SELECT  TOP 5 amount, SUM(amount) OVER()
FROM    table
ORDER BY
        amount DESC
1 голос
/ 05 июня 2009

Не очень красиво, но это должно делать это:

SELECT TOP 5 amount,  SAmount
FROM table Join 
  (SELECT SUM(amount) As SAmount FROM table)
ORDER BY amount DESC

Как говорили другие, я бы, вероятно, использовал два запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...