SQL Group, возвращая неверные результаты - PullRequest
0 голосов
/ 09 октября 2019

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

Я знаю, что это связано с тем, что я использовал GROUP BY, не налагая на него никаких ограничений (?), следовательно, он возвращает мне неправильное имязначение, но я не уверен, как я могу это решить.

SALARY TABLE

  • salaryID
  • salaryAmount
  • salaryYear
  • industryName (ForeignKey)

Может кто-нибудь подсказать мне правильный путь?

    **(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);

Ответы [ 2 ]

1 голос
/ 09 октября 2019

Используйте правильное GROUP BY. Любые неагрегированные столбцы должны быть включены в GROUP BY.

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

Если вы хотите включить industryName,

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

Версия Pre-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
0 голосов
/ 09 октября 2019

Я думаю, вам нужно самостоятельное соединение:

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;

Демонстрация этого запроса с вашими примерами данных

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