Есть ли способ свернуть строки, чтобы показать только разные имена? - PullRequest
0 голосов
/ 27 марта 2019

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

Я пытался выполнить MAX и Order By, но ни один из них не соответствует тому, что я пытаюсь создать, или я могу делать это совершенно неправильно.

Например, что я ищуfor - это следующее:

(Данные перед извлечением действительно имеют дату, связанную с каждой строкой, но для извлечения даты, которую я беру, не имеет значения)

Category   |     Game     |    Sold
   FPS     | Battlefield 5|     12
   FPS     |  Division 2  |     15
   FPS     |  Black Ops   |      5
Strategy   |    TW:WH2    |     13
Strategy   |    TW:WH2    |     17
   FPS     | Battlefield 5|     15
   FPS     |  Division 2  |     10
Strategy   | Satisfactory |     12

ЧтоЯ хочу, чтобы это выглядело следующим образом:

Category   |     Game     |    Sold
   FPS     | Battlefield 5|     27
           |  Division 2  |     25
           |  Black Ops   |      5
Strategy   |    TW:WH2    |     30
           | Satisfactory |     12

Возможно ли это сделать, как мне кажется, я видел это раньше, но я не уверен, как написать код для созданияthis.

Любая помощь будет принята с благодарностью!

-Maykid

1 Ответ

3 голосов
/ 27 марта 2019

Ниже для BigQuery Standard SQL

#standardSQL
SELECT category, 
  ARRAY_AGG(STRUCT(game AS game, sold AS sold) ORDER BY sold DESC) sale
FROM (
  SELECT category, game, SUM(sold) sold
  FROM `project.dataset.table`
  GROUP BY category, game
)
GROUP BY category   

Вы можете протестировать, поиграть с выше, используя примеры данных из вашего вопроса, как в примере ниже

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'FPS' category, 'Battlefield 5' game, 12 sold UNION ALL
  SELECT 'FPS', 'Division 2', 15 UNION ALL
  SELECT 'FPS', 'Black Ops', 5 UNION ALL
  SELECT 'Strategy', 'TW:WH2', 13 UNION ALL
  SELECT 'Strategy', 'TW:WH2', 17 UNION ALL
  SELECT 'FPS', 'Battlefield 5', 15 UNION ALL
  SELECT 'FPS', 'Division 2', 10 UNION ALL
  SELECT 'Strategy', 'Satisfactory', 12 
)
SELECT category, 
  ARRAY_AGG(STRUCT(game AS game, sold AS sold) ORDER BY sold DESC) sale
FROM (
  SELECT category, game, SUM(sold) sold
  FROM `project.dataset.table`
  GROUP BY category, game
)
GROUP BY category   

с результатом

enter image description here

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