Соединение SQL для 4 таблиц не возвращает правильное количество

У меня 4 стола.

Последовательности

id -> primary key
name 
user_id -> foreign key   (users id)

люди:

id-> primary key
name-> varchar
seq_id -> foreign key from sequences
user_id -> foreign key from users

links_clicked:

id-> primary key
src_id -> foreign key (sequences id)
views -> Boolean

people_sequence

sequence_id-> foreign key   (sequences id)
people_id ->  foreign key   (people id)

Мне нужно получить подробную информацию о последовательностях, количество кликов по ссылкам из таблицы ссылок, количество людей, если там указан seq_id, и количество последовательностей из последовательности из таблицы people_sequence. Я думаю, мне нужно использовать левые соединения, и я написал запрос, как показано ниже:

SELECT  sequences.*
       ,sum(link_clicked.view) as click_rate 
       ,count(people.seq_id) as prospect 
       ,count(people_sequences.sequence_id) as seqret 
FROM sequences 
LEFT JOIN link_clicked ON sequences.id=link_clicked.src_id 
LEFT JOIN people ON sequences.id=people.seq_id
LEFT JOIN people_sequences ON sequences.id=people_sequences.sequence_id
where sequences.user_id = 1
group by sequences.id

но это возвращает счетчики для каждого столбца счетчика как те же

Невозможно понять, что не так с SQL

id            | name |  user_id |click_rate |   prospect|seqret
5ac77be52d06e | seq1 |1         | 414       |    1890   | 1890
5ae790b48fea9 | seq2 |1         | 8         |    43     | 0
5ae790b6e0b12 | seq3 |1         | 2         |    0      | 0
5ae835c5153b5 | seq4 |1         | NULL      |    0      | 0

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

SELECT `src_id` ,sum(`view`) FROM `link_clicked ` group by src_id

src_id         | sum(`view`)
5ac77be52d06e  | 23
5ae790b48fea9  | 8
5ae790b6e0b12  |2

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

âńōŋŷXmoůŜ 01.05.2018 20:04

Возможно, Count - это не совсем то, что вы ищете в запросе. На счетчик влияет только условие WHERE.

Jiggles32 01.05.2018 20:17

@ âńōŋŷXmoůŜ, спасибо! обновил вопрос. Должен ли я также включать результаты отдельных запросов

Stacy Thompson 01.05.2018 20:18

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

âńōŋŷXmoůŜ 01.05.2018 20:25

Каковы ваши ожидаемые результаты здесь?

Daniel Marcus 01.05.2018 20:47

@DanielMarcus нужно правильное количество и сумма столбцов, которые соответствуют идентификатору последовательности

Stacy Thompson 01.05.2018 20:49

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

Daniel Marcus 01.05.2018 20:50

похоже, вам нужно напрямую присоединять людей к people_sequences

Daniel Marcus 01.05.2018 20:52
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
8
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я думаю, что эти левые объединения сведут ваши результаты с ума ... вы получите несколько повторяющихся записей для всего, поскольку все перестановки объединений генерируются как результаты, ведущие к бессмысленным суммам / подсчетам. Чтобы увидеть все повторяющиеся результаты, удалите агрегирование, и вы получите очень длинный повторяющийся и вводящий в заблуждение список. Попробуйте вместо этого, может быть, 3 подзапроса?

SELECT S.*
       ,(SELECT COUNT(IIF([view], 1, 0)) FROM link_clicked WHERE src_id=S.id) click_rate
       ,(SELECT COUNT(*) FROM people WHERE seq_id=S.id) prospect
       ,(SELECT COUNT(*) FROM people_sequences WHERE sequence_id=S.id) seqret
FROM sequences S
WHERE S.user_id=1;

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