[英]SQL Group by returning wrong results
我有一個薪水表,我試圖在其中返回確定最低薪水以及每年的行業,但是盡管獲得了正確的最低薪水,但我收到了錯誤的行業名稱。
我知道這是因為我使用了GROUP BY
而沒有對其施加約束(?),因此它返回了錯誤的值,但我不確定如何解決它。
工資表
有人可以指導我正確的道路嗎?
**(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.