Проблема SQL Server 2008 найти разницу - PullRequest
0 голосов
/ 16 апреля 2011
ID   Name  Salary
-----------------
1    A     5000
2    B     2000
3    C     7000
4    D     6000

Теперь проблема в том, что мы должны найти максимальную зарплату, а затем узнать разницу с другими зарплатами.

В одном запросе.

Аналогично мы должны найти с2-й и 3-й в следующем запросе или в аналогичном запросе.

Ответы [ 3 ]

2 голосов
/ 16 апреля 2011

Использование:

    SELECT x.id, x.name,
           x.salary,
           y.max_salary - x.salary AS diff
      FROM YOUR_TABLE x
CROSS JOIN (SELECT MAX(t.salary) AS max_salary
              FROM YOUR_TABLE t) y

Чтобы получить 2-ю / 3-ю / и т.д. самую высокую зарплату, используйте:

    SELECT x.id, x.name,
           x.salary,
           y.max_salary - x.salary AS diff
      FROM YOUR_TABLE x
CROSS JOIN (SELECT u.max_salary 
              FROM (SELECT t.salary AS max_salary,
                           ROW_NUMBER() OVER (ORDER BY t.salary DESC) AS rank
                      FROM YOUR_TABLE t) u
             WHERE u.rank = ?) y

Замените ? на позицию / ранг, который вы хотите получить.

2 голосов
/ 16 апреля 2011

При нахождении разницы между макс. Используйте

SELECT ID, Name, Salary-(SELECT MAX(Salary) FROM Salaries) AS SalaryDiff
FROM Salaries

Для сравнения с 2-й, 3-й и т. Д. Самой высокой зарплатой (при необходимости измените =2 на =3, =4 и т. Д.)

SELECT ID, Name, Salary-(SELECT Salary FROM (SELECT Distinct Salary from Salaries) 
      WHERE (ROW_NUMBER() OVER (ORDER BY Salary))=2) AS SalaryDiff
FROM Salaries
2 голосов
/ 16 апреля 2011

Поскольку я не уверен, что это домашняя работа или нет, я не хочу просто вставлять запрос.

Вот несколько советов.

В MAX () есть функцияSQL, который вы могли бы использовать, чтобы найти максимальное значение определенного поля.

Затем вы можете использовать это в других вычислениях, даже в том же запросе.

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