簡體   English   中英

SQL 通過返回錯誤結果分組

[英]SQL Group by returning wrong results

我有一個薪水表,我試圖在其中返回確定最低薪水以及每年行業,但是盡管獲得了正確的最低薪水,但我收到了錯誤的行業名稱。

我知道這是因為我使用了GROUP BY而沒有對其施加約束(?),因此它返回了錯誤的值,但我不確定如何解決它。

工資表

  • 工資ID
  • 工資金額
  • 工資年
  • 行業名稱(外鍵)

有人可以指導我正確的道路嗎?

    **(Problem Code)**
    SELECT MIN(S.salary), S.industryName, S.salaryYear
    FROM salary
    GROUP BY S.salaryYear;



    **(Attempted solution)**
    SELECT S.salary
    FROM salary
    INNER JOIN 
    SELECT (min(S1.amount)), S1.year, S1.industryName, S1.salaryId 
    FROM salary S1 
    GROUP BY S1.year
    ON S.salaryId = S1.salaryId);

使用適當的GROUP BY 任何非聚合列都必須包含在GROUP BY中。

SELECT MIN(amount), year
FROM salary
GROUP BY year

如果要包含行業名稱,

SELECT amount, year, industryName, salaryId
FROM (
    SELECT amount, year, industryName, salaryId 
        , ROW_NUMBER() OVER(PARTITION BY year ORDER BY amount) AS rn
    FROM salary
 ) a
 WHERE rn = 1

MySQL 8 之前的版本

SELECT *
FROM salary s
INNER JOIN (
    SELECT MIN(amount) AS minAmount, year
    FROM salary
    GROUP BY year
) m ON m.minAmount = s.amount AND m.year = s.year

我認為你需要一個自我加入:

SELECT s1.industryName, s2.min_salary, s2.salaryYear
  FROM salary s1
  JOIN  
  (
   SELECT MIN(salary) as min_salary, salaryYear
    FROM salary
   GROUP BY salaryYear
   ) s2
    ON s1.salary = s2.min_salary
   AND s1.salaryYear = s2.salaryYear;

此查詢的演示與您的示例數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM