Subquery

有沒有辦法在查詢中多次使用分組數據

  • January 28, 2016

假設一個表包含員工 ID、部門名稱和薪水。我想選擇總工資高於所有部門平均工資的部門。

我知道的解決方案是按部門對數據進行分組以查找該部門給出的工資總和,然後使用 having 子句將總和與子查詢的輸出進行比較,該子查詢再次按部門分組並找到平均部門工資。

我想知道是否可以按部門分組一次,並多次使用這個分組數據,這樣我們就不必一次又一次地分組。

以下將為您提供作業答案。解決這個問題的方法有很多,在子查詢中多次分組也未必不好。大多數 RDBMS 引擎將能夠優化您的查詢(一些),並且對於這個特定問題,性能可能不是問題。

SELECT TOP (1)
    Department
   ,SumSalary
   ,AvgSalary
FROM
(
SELECT
    Department
    ,SumSalary
   ,AVG(SumSalary) OVER(PARTITION BY NULL) AS AvgSalary
FROM
(
SELECT
    Department
   ,SUM(Salary) AS SumSalary
FROM DIM.Property
GROUP BY Department
) SubQuery
) x
WHERE SumSalary > AvgSalary
ORDER BY SumSalary DESC

我建議您繼續閱讀,Window Functions以便完全解釋送出的任何工作(每個 DB 和 ANSI SQL都有大量站點和技術文件)。

另請注意,aTOP (1)僅獲得高於平均水平的單個最高薪部門,因為您可能有許多符合此標準。為了確保您獲得最高薪水,最高薪水的ORDER BY保證是最高的。您仍然有可能兩個部門支付相同的金額,但在這種情況下您有一個不確定的查詢(不能保證每次都得到同一個部門)。您需要一個決勝局,除非您接受這種隨機結果的可能性,或者其他一些業務流程或規則保證不會發生這種情況(是的,對!)。

引用自:https://dba.stackexchange.com/questions/127395