Jestem pewien, że ma to bardzo prostą odpowiedź, ale nie mogę tego znaleźć (nie jestem pewien, czego szukać!) . Standardowa liczba/grupę o zapytaniu może wyglądać następująco:MYSQL: COUNT z klauzulą GROUP BY, LEFT JOIN i WHERE nie zwraca zerowych wartości
SELECT COUNT(`t2`.`name`)
FROM `table_1` `t1`
LEFT JOIN `table_2` `t2` ON `t1`.`key_id` = `t2`.`key_id`
WHERE `t1`.`another_column` = 123
i działa zgodnie z oczekiwaniami, wracając 0, jeśli nie zostaną znalezione żadne wiersze. Jednak:
SELECT COUNT(`t2`.`name`)
FROM `table_1` `t1`
LEFT JOIN `table_2` `t2` ON `t1`.`key_id` = `t2`.`key_id`
WHERE `t1`.`another_column` = 123
GROUP BY `t1`.`any_col`
działa tylko wtedy, gdy w tabeli 1 znajduje się co najmniej jeden wiersz i niewiarygodnie zwraca pusty zestaw wyników, jeśli występują zero wierszy. Naprawdę chciałbym, aby zwrócono 0! Ktoś mnie oświeca? Piwo może być dostarczone w zamian, jeśli jesteś w Londynie ;-)
Dlaczego pierwszy przykład działa ładnie? Wszystko, czego brakuje, to klauzula WHERE, wciąż nie ma wierszy, a to zadziała dobrze ... –
@Paul Norman - Pierwszy przykład działa, ponieważ wyraźnie widać wiersze w tabeli_1. Trzeci przykład nie działa, ponieważ najwyraźniej nie ma żadnych wierszy w tabeli_1, które mają wartość 123 dla "kolejnej_kolumny". Jeśli zapytanie bez grupy nie zwraca żadnych wierszy, to nie zwróci wierszy z grupowaniem. – Thomas