SQL-запрос для подсчета разных записей и печати в 1 строку - PullRequest
0 голосов
/ 16 мая 2018

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

Это моя таблица:

   NAME   |   REWARD    |    DATE
----------+-------------+------------
  Chris   |    small    |  18.05.2014
  Chris   |    small    |  27.08.2015
  Chris   |    big      |  01.07.2014
  Tom     |    big      |  10.10.2016
  Tom     |    big      |  30.11.2017

Результат должен выглядеть следующим образом:

   NAME   | BIG_REWARDS | SMALL_REWARDS | LAST_BIG_REWARD | LAST_SMALL_REWARD
----------+-------------+---------------+-----------------+-------------------
  Chris   |      1      |       2       |    01.07.2014   |    27.08.2015
  Tom     |      2      |       0       |    30.11.2017   |        

Я использую Firebird

1 Ответ

0 голосов
/ 16 мая 2018

Вы можете использовать условное агрегирование:

SELECT name,  
      SUM(CASE WHEN reward = 'big'   THEN 1 ELSE 0 END) AS BIG_REWARDS,
      SUM(CASE WHEN reward = 'small' THEN 1 ELSE 0 END) AS SMALL_REWARDS,        
      MAX(CASE WHEN reward = 'big'   THEN "DATE" END) AS LAST_BIG_REWARD,
      MAX(CASE WHEN reward = 'small' THEN "DATE" END) AS LAST_SMALL_REWARD
FROM tab
GROUP BY name;
...