Ограничить верхнюю пару столбцов - PullRequest
0 голосов
/ 01 августа 2020

Данные, с которыми я работаю, выглядят следующим образом:

category_id   subcategory_id    date       quantities       
    123            45          2020-02-01      500
    123            45          2020-02-13      400
    456            35          2020-05-09      350
    456            35          2020-05-15      250
    456            35          2020-06-18      200
     .
     .
     .
     n such columns

Количества отсортированы по убыванию Я хочу получить данные (как показано выше) для первых (верхних) 10 уникальных пар ( category_id, subcategory_id). Точно так же, как мы используем ограничение 10 для получения первых 10 записей, я хочу ограничить его 10 первыми уникальными парами (category_id, subcategory_id) и получить все данные, как показано выше.

Ответы [ 2 ]

1 голос
/ 01 августа 2020

Ниже для BigQuery Standard SQL

#standardSQL
SELECT * EXCEPT(rn) FROM (
  SELECT *, 
    ROW_NUMBER() OVER(PARTITION BY category_id, subcategory_id ORDER BY quantities DESC) rn
  FROM `project.dataset.table`
)
WHERE rn <= 10   

Другой - больше BigQuery'i sh ниже

#standardSQL
SELECT TopN.* FROM (
  SELECT ARRAY_AGG(t ORDER BY quantities DESC LIMIT 10) topN
  FROM `project.dataset.table` t
  GROUP BY category_id, subcategory_id
) t, t.topN
0 голосов
/ 01 августа 2020

Если вам нужно 10 строк, каждая с разными парами category_id / subcategory_id, вы можете использовать:

select t.* except (seqnum)
from (select t.*,
             row_number() over (partition by category_id, subcategory_id order by quantities desc) as seqnum
      from t
     ) t
where seqnum = 1
order by quantities desc
limit 10;

Это получает первую строку (по quantities) для каждой пары идентификаторов а затем ограничивается 10 самыми большими значениями.

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