Найти соотношение флагов для каждого связанного идентификатора из table_a.canon_id, используя mysql объединений? - PullRequest
1 голос
/ 31 марта 2020
table_a
user_id  canon_id  ratio (count of 1 / total)
1        1000      0.33
2        1000      0.33
3        1000      0.33
11       4344      0.50
88       4344      0.50
7        2023      0
8        2023      0
10       2023      0
12       3333      0.80
17       3333      0.80
18       3333      0.80
19       3333      0.80
20       3333      0.80

table_b
user_id  flag
1        0
2        0
3        1
11       1
88       0
14       0
7        1
8        1
10       1
12       1
17       1
18       1
19       1
20       0

В вышеприведенном случае, как я могу объединить таблицы и заполнить table_a.ratio, используя флаги из другой таблицы MySQL? формула для отношения (количество 1 / общее количество идентификаторов пользователя, связанных с этим canon_id)

1 Ответ

1 голос
/ 31 марта 2020

Если вы используете MySQL 8.0, вы можете использовать оконные функции. avg() приходит на ум:

select a.*, avg(b.flag) over(partition by a.canon_id) ratio
from table_a a
left join table_b b on b.user_id = a.user_id

В более ранних версиях коррелированный подзапрос мог бы быть приемлемым решением:

select 
    a.*,
    (
        select avg(b1.flag) 
        from table_a a1 
        left join table_b b1 on b1.user_id = b.user_id
        where a1.canon_id = a.canon_id
    ) ratio
from table_a a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...