У меня 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
Возможно, Count - это не совсем то, что вы ищете в запросе. На счетчик влияет только условие WHERE.
@ âńōŋŷXmoůŜ, спасибо! обновил вопрос. Должен ли я также включать результаты отдельных запросов
Я имел в виду дать нам образцы данных по 4 таблицам. Таким образом, мы можем дважды проверить правильность суммы и подсчета, исходя из наших ожиданий.
Каковы ваши ожидаемые результаты здесь?
@DanielMarcus нужно правильное количество и сумма столбцов, которые соответствуют идентификатору последовательности
правильно, я говорю, какие правильные результаты вы ожидаете увидеть? вы можете предоставить образец?
похоже, вам нужно напрямую присоединять людей к people_sequences


Я думаю, что эти левые объединения сведут ваши результаты с ума ... вы получите несколько повторяющихся записей для всего, поскольку все перестановки объединений генерируются как результаты, ведущие к бессмысленным суммам / подсчетам. Чтобы увидеть все повторяющиеся результаты, удалите агрегирование, и вы получите очень длинный повторяющийся и вводящий в заблуждение список. Попробуйте вместо этого, может быть, 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;
дайте нам образцы данных и какой результат вы ожидаете