я испытал что-то ... странное? с использованием агрегатной функции БЕЗ группы по оператору (да, я знаю, что мог бы). Сейчас я использую mysql 5.5.
Я использовал несколько примеров таблиц с той же структурой, что и в моей реальной ситуации, так что пример может быть extrange, извините.
Давайте объясните.
У меня есть три таблицы с некоторой ссылочной целостностью:
Как вы можете себе представить: оба, родительский, дочерний и персональный, являются FK из идентификатора таблицы Persons.
- Persons -
id name
1 Anna
2 Ben
3 Charly
4 Dennis
5 Emma
6 Fiona
- Relationships -
parent child
1 3
1 4
2 5
- Log -
person date
1 2020-05-05
У Анны двое детей, Чарли и Деннис
Один ребенок у Бена, Эмма
У Фионы нет
Только у Анны есть запись в журнале
Давай устроим вечеринку.
Найти детей с идентификатором 3, имя ТОЛЬКО если номер 6 - его родитель (ищу Чарли, если сын Фионы)
select P.name, R.child, R.parent
from Persons P
join Relationships R on P.id = R.child
left join Log L on L.person = P.id
where R.parent = 1
and R.child = 3
Результат не показан, хорошо, это то, что я ожидал, потому что, как мы видим, нет строки, соответствующей условию.
Добавление агрегатной функции и группы по показывает те же результаты 0.
select P.name, R.child, R.parent, count(L.person) as N_Entries
from Persons P
join Relationships R on P.id = R.child
left join Log on L.person = P.id
where R.parent = 1
and R.child = 3
group by P.id
НО
, если я удалю группу по условию i ожидать того же результата
, если результата нет, группировка не должна быть cesary.
select P.name, R.child, R.parent, count(L.person) as N_Entries
from Persons P
join Relationships R on P.id = R.child
left join Log on L.person = P.id
where R.parent = 1
and R.child = 3
name child parent N_Entries
Charly null null 0
Почему он что-то возвращает?
Спасибо и извините за мой плохой engli sh.