добавление значения строки к итоговому условию if (не знаю, как спросить это) - PullRequest
0 голосов
/ 30 октября 2018

Я использую систему начисления баллов для компаний, где каждый сотрудник, работающий в этой компании, зарабатывает несколько баллов.
Каждый месяц начисляются баллы для компаний.
Пока это работает, но в 9-м месяце этого года я хотел бы дать двойные баллы за каждого приобретенного сотрудника в этом месяце.
Я не знаю, как это сделать. У меня есть этот запрос сейчас:

SELECT company, (employees *2) as "Points" 
FROM data 
WHERE month = '10' 
GROUP BY company

Но, как вы видите, я даю 2 балла за каждого сотрудника, который работает в этой компании в этом месяце.
Но за 9 месяц я хочу дать двойные очки и добавить их к текущим точкам в текущем месяце (10)

У меня есть этот SQLfiddle в качестве примера: http://sqlfiddle.com/#!9/2cb812/7

Ожидаемый результат:

company     Points
__________________
company 1   26 + (extra points from month 9)
company 2   32 + (extra points from month 9)
company 3   44 + (extra points from month 9)

1 Ответ

0 голосов
/ 30 октября 2018

Так что все дело в дельте августа / сентября 2018 года. Если вы выполняете запрос за любой месяц до сентября 2018 года (июнь 2018 года, май 2012 года и т. Д.), Вы просто хотите получить баллы текущего месяца. Если вы выполняете запрос в течение любого месяца после августа 2018 года (декабрь 2018 года, март 2022 года, ...), вы хотите добавить бонусные баллы 2018 года.

Группировка по компании и использование условной агрегации (функция агрегирования по условию) для вычисления этого.

Мы должны посмотреть на запрашиваемый месяц (например, 10/2018) и август 2018 года и сентябрь 2018 года.

SET @yearmonth = '201810';

SELECT
  company, 
  SUM(
   CASE WHEN yearmonth = @yearmonth THEN employees * 2 ELSE 0 END +
   CASE WHEN @yearmonth >= '201809' AND yearmonth = '201809' THEN employees * 4 ELSE 0 END -
   CASE WHEN @yearmonth >= '201809' AND yearmonth = '201808' THEN employees * 4 ELSE 0 END
  ) AS points
FROM data
WHERE yearmonth in ('201808', '201809', @yearmonth)
GROUP BY company
ORDER BY company;

Предложение WHERE является излишним, поскольку месяцы проверяются внутри функции SUM, но это может ускорить запрос.

Rextester demo: https://rextester.com/ELOWTL44361

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