Как сделать запрос, чтобы захватить актуальность и масштаб в одном запросе? - PullRequest
0 голосов
/ 17 февраля 2020

Я построил запрос, который вычисляет количество идентификаторов из таблицы на количество URL.

with cte as (
  select id, count(distinct.url) url_count
  from table
  group by id
)

select sum(if(url_count >= 1,1,0) scale
from cte
union all
select sum(if(url_count >= 2,1,0) scale
from cte
union all
select sum(if(url_count >= 3,1,0) scale
from cte
union all
select sum(if(url_count >= 4,1,0) scale
from cte
union all
select sum(if(url_count >= 5,1,0) scale
from cte

В приведенном выше запросе сказано: «Дайте мне список идентификаторов и количество URL-адресов для каждого из них go, а затем накапливайте количество идентификаторов, которые перешли на [1-5] или более URL-адресов»

Это c a утомительный метод, но работает и выводит что-то вроде;

---------
| scale |
---------
|1213432|
|867554 |
|523523 |
|342232 |
|145889 |
---------

Из этой таблицы у меня также есть поле даты за последние 5 дней, над которым я работаю над добавлением в этот запрос. Таким образом, лежит проблема; Попытка добавить второй уровень информации к запросу; т.е. Работал над несколькими подходами к построению запроса, который выводил бы все комбинации разных масштабов на дату.

Мое воображение представляет собой сводную таблицу, представляющую что-то вроде:

-------------------------------------------------------------
|   date   | url_co1 | url_co2 | url_co3 | url_co4 | url_co5|
-------------------------------------------------------------
|2020-01-05| 1213432 | 1112321 | 984332  | 632131  | 234124 |
|2020-01-04| 1012131 |  934242 | 867554  | 533242  | 134234 |
|    ...   |   ...   |   ...   |   ...   |   ...   |   ...  |
|    ...   |   ...   |   ...   |   ...   |   ...   |   ...  |
|    ...   |   ...   |   ...   |   ...   |   ...   |   ...  |
-------------------------------------------------------------

Где url_co [1-5] представляет количество идентификаторов, которые посетили [1-5] или более URL-адресов, а даты дают дату, когда объем был захвачен. Не знаю, как написать это, потому что, как только я сделаю запрос:

with cte as (
  select id, date, count(distinct.url) url_count
  from table
  group by id, date
)

Я агрегировал в расчете на идентификатор, на дату, что, следовательно, что-то идет не так. = /

Надеюсь, что все это имеет смысл!

Пожалуйста, помогите! Я был бы признателен за некоторые рекомендации.

Должна существовать методика для получения комбинации томов в расчете на одну свежую информацию, которую я пропустил!

1 Ответ

1 голос
/ 17 февраля 2020

Я не совсем слежу за полным вопросом, но первый запрос можно упростить до:

select url_count, count(*) as this_count,
       sum(url_count) over (order by url_count desc) as descending_count
from (select id, count(distinct url) as url_count
      from table
      group by id
     ) t
group by url_count
order by url_count;
...