Я задал предыдущий вопрос о выполнении многоуровневого запроса агрегации по оси X здесь: Получите лучшие страны патентов, коды в общедоступном наборе данных BQ .
Вот как работает запрос (скопированный из принятого ответа):
Лучшие 2 страны по количеству, а внутри этих стран 2 лучших кода по количеству
WITH A AS (
SELECT country_code
FROM `patents-public-data.patents.publications`
GROUP BY country_code
ORDER BY COUNT(1) DESC
LIMIT 2
), B AS (
SELECT
country_code,
application_kind,
COUNT(1) application_kind_count
FROM `patents-public-data.patents.publications`
WHERE country_code IN (SELECT country_code FROM A)
GROUP BY country_code, application_kind
), C AS (
SELECT
country_code,
application_kind,
application_kind_count,
DENSE_RANK() OVER(PARTITION BY country_code ORDER BY application_kind_count DESC) AS application_kind_rank
FROM B
)
SELECT
country_code,
application_kind,
application_kind_count
FROM C
WHERE application_kind_rank <= 2
И я получаю что-то вроде:
country_code application_kind count
JP A 125
JP U 124
CN A 118
CN U 101
Теперь я хотел бы добавить следующий ось Y: чтобы получить следующее:
- X : 2 лучших страны по количеству, а внутри этих стран 2 лучших кода по количеству
- Y : лучшие 2 family_id по количеству, лучшие 2 priority_date по количеству
Окончательные результаты будут выглядеть следующим образом:
![enter image description here](https://i.stack.imgur.com/uk56N.png)
Я могу построить Y-запрос во втором запросе -
WITH A AS (
SELECT family_id
FROM `patents-public-data.patents.publications`
GROUP BY family_id
ORDER BY COUNT(1) DESC
LIMIT 2
), B AS (
SELECT
family_id,
priority_date,
COUNT(1) priority_date_count
FROM `patents-public-data.patents.publications`
WHERE family_id IN (SELECT family_id FROM A)
GROUP BY family_id, priority_date
), C AS (
SELECT
family_id,
priority_date,
priority_date_count,
DENSE_RANK() OVER(PARTITION BY family_id ORDER BY priority_date_count DESC) AS priority_date_rank
FROM B
)
SELECT
family_id,
priority_date,
priority_date_count
FROM C
WHERE priority_date_rank <= 2
Однако я не совсем уверен, как объединить их в один запрос или в два.