Подскажите почему такие неожиданные результаты выдает запрос?
Таблица user
+----+-------+
| id | name |
+----+-------+
| 1 | admin |
+----+-------+
Таблица address
+---------+-------+
| user_id | addrr |
+---------+-------+
| 1 | addr1 |
+---------+-------+
| 1 | addr2 |
+---------+-------+
Запрос:
SELECT COUNT(user.id) AS count
FROM user
LEFT JOIN address ON user.id = address.user_id
WHERE user_id = 1
GROUP BY user.id
[count] => 2
Почему count = 2 а не 1, GROUP BY же группирует все по идентификатору пользователя? Например, если запустить такой запрос:
SELECT user.id
FROM user
LEFT JOIN address ON user.id = address.user_id
WHERE user_id = 1
GROUP BY user.id;
[id] => 1
То ожидаемо появится только один id. Если их этого запроса убрать GROUP BY, то ответ без сюрпризов: [id] => 1 [id] => 1
.
Если добавить DISTINCT, то все подсчитывается как и задумывалось:
SELECT COUNT(DISTINCT(user.id)) AS count
FROM user
LEFT JOIN address ON user.id = address.user_id
WHERE user_id = 1
GROUP BY user.id
[count] => 1
Получается, что сначала подсчитывается COUNT() а только потом группируется с помощью GROUP BY?
Простите за ответ скриншотами, но автора по другому убедить не выйдет, в комментариях я ему написал текстом =)
Мы с автором вопроса пришли к некому согласию по входным данным, теперь ответ на вопрос:
user_id=1
) То COUNT - вернет количество сгруппированых в одну строку записей(т.е. в вашем случае 2 шт).Group BY подавляет вывод, но не мешает подсчету удаленных из вывода данных.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Finding Rows with the Maximum Value of a Column by Group
имеются две таблицы с разными полями таблица test: id,name,address,phone,birthday,company,about