Lý do nó trả về 0 hàng là bạn đang nhóm trên một giá trị trong bảng_1. Sau khi không có giá trị nào trong bảng_1, không có hàng nào để trả về. Nói theo cách khác, nếu bạn trả về t1.any_col trong truy vấn của mình từ GROUP BY như vậy:
SELECT `t1`.`any_col`, 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`
Điều gì sẽ hiển thị cho t1.any_col khi không có hàng? Cách duy nhất để đạt được những gì bạn muốn là kết hợp các kết quả của bạn với một truy vấn khác để kiểm tra xem không có hàng nào trong bảng_1. Trong ví dụ này, tôi đang sử dụng chế độ xem INFORMATION_SCHEMA chỉ để có một thứ gì đó mà tôi có thể truy vấn.
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`
UNION ALL
SELECT 0
FROM INFORMATION_SCHEMA.TABLES
Where Not Exists( Select 1 From `table_1` )
LIMIT 1