Как я могу подсчитать некоторые значения для данных в таблице на основе того же ключа в другой таблице в Bigquery?

У меня есть одна таблица, как показано ниже. Каждый идентификатор уникален.

я бы times_of_going_out fef666 2 S335gg 1 9a2c50 1

и еще одна таблица, подобная этой ↓. В этой второй таблице «id» не уникален, для одного идентификатора существуют разные «category_name».

я бы категория_имя город S335gg Игры и принадлежности для игр тк 9a2c50 Телефонные компании Операционные системы 9a2c50 Базы отдыха ку fef666 Базы отдыха ку

Я хочу найти разницу между пунктами назначения (category_name) людей, которые часто выходят из дома (times_of_going_out<5), и людьми, которые редко выходят из дома (times_of_going_out<=5).

** Обе таблицы представляют собой небольшую выборку больших таблиц.

・ Куда часто ходят люди, которые дважды выходят на улицу? ・ Куда чаще всего ходят люди, которые выходят 6раз? Спасибо

Ожидаемый результат может быть примерно таким

менее 5 более 5 первая десятка «category_name» для uid с «times_of_going_out» менее 5 раз первая десятка «category_name» для uid с «times_of_going_out» более 5 раз

В заголовке написано «MySQL», но вы отметили вопрос «google-bigquery», какой из них вы используете?

ahmed 07.11.2022 11:32

извини @ahmed, я думал, что Bigquery такой же, как MySQL (да, этот новичок). Я использую BigQuery.

アルサ 07.11.2022 11:40

можете ли вы также добавить таблицу ожидаемых результатов, указав также степень детализации

trillion 07.11.2022 11:50

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

trillion 07.11.2022 11:55

@trillion Я добавляю изображение того, что мне нужно. Спасибо

アルサ 07.11.2022 12:13

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

trillion 07.11.2022 12:35

@trillion Я не уверен, что понимаю тебя. Как я могу предоставить таблицу, если я не знаю ответа.

アルサ 07.11.2022 12:59

@アルサ решение работает?

trillion 07.11.2022 14:19

@アルサ Ваша проблема решена?

kiran mathew 07.11.2022 16:02

@trillion Мне нужно 10 лучших повторяющихся мест, код дал мне места меньше и больше 5 раз, но не самые повторяющиеся места.

アルサ 09.11.2022 06:27

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

trillion 09.11.2022 08:49
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
11
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Шаги:

  • объединение данных и агрегирование общего времени time_going_out
  • создание категорий, которые вам нужны: меньше равно 5 и больше 5. если вам не нужно равно 5, вы можете настроить код
  • ранжирование обеих категорий в топ-10 с помощью плотности_rank(). это даст ранг от 1 до 10 на основе общего времени выхода
  • фильтрация случаев, поэтому он принимает 10 лучших значений для обеих категорий

with main as (

select 
category_name,
sum(coalesce(times_of_going_out,0)) as total_time_per_category
from table1 as t1
left join table2 as t2
on t1.id = t2.id
group by 1
),

category as (

select
*,

if (total_time_per_category >= 5, 'more than 5', 'less than equal to 5') as is_more_than_5_times
from main
), 

ranking_ as (

select *, 

case when
 is_more_than_5_times = 'more than 5' then 
dense_rank() over (partition by is_more_than_5_times order by total_time_per_category desc)
        else NULL
    end AS rank_more_than_5,

case when
 is_more_than_5_times = 'less than equal to 5' then 
dense_rank() over (partition by is_more_than_5_times order by total_time_per_category)
        else NULL
    end AS rank_less_than_equal_5

from category
)

select 
is_more_than_5_times,
string_agg(category_name,',') as list
from ranking_
where rank_less_than_equal_5 <=10 or rank_more_than_5 <= 10
group by 1

Другие вопросы по теме