Сумма, смешанная с LEFT JOIN и GROUP BY в запросе MYSQL - PullRequest
0 голосов
/ 05 апреля 2020

У меня возникли проблемы с запросом, который включает сумму, левое объединение и группу по

$sql = "
SELECT h.id AS hid
     , SUM(l.likes) AS likes 
  FROM homes h
  LEFT 
  JOIN likes l
    ON l.homeid = h.id
 GROUP 
    BY h.id
";

Вместо суммирования лайков для каждого дома, он дает NULL, если у дома нет лайков или число 8873, если оно имеет один лайк. Я действительно не могу понять 8873.

Следует отметить, что в этой таблице много лайков для других вещей, и в этом случае значение l.homeid равно NULL. Разве это может сбить с толку?

Редактировать:

Я добавил еще один лайк для homeid от другого пользователя, и теперь он дает мне 8906 вместо 8873 для тех, кто с 1 лайком и 17812 для одного с двумя лайками. Это очень странно. Тип данных для всех чисел int (11). Я собираюсь создать совершенно новую таблицу и посмотреть, делает ли она то же самое. Я также собираюсь удалить уникальный индекс, который я недавно добавил.

1 Ответ

1 голос
/ 05 апреля 2020

Попробуйте переместить агрегацию в производную таблицу и присоединиться, а затем присоединиться к ней:

SELECT
    h.id                   AS hid
  , COALESCE( l.likes, 0 ) AS likes
FROM homes h
LEFT JOIN (
        SELECT
            homeid
          , COUNT( likes ) AS likes
        FROM likes
        GROUP BY
            homeid
    ) AS l ON h.id = l.homeid

Также попробуйте COUNT() вместо SUM()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...