MYSQL count: выбрать ВСЕХ из пользователей, считать активные / всего рекламы (2 отсчета) - PullRequest
4 голосов
/ 28 декабря 2011

У меня есть таблица пользователей и таблица объявлений

Я хотел бы выбрать ВСЕХ пользователей из таблицы с двумя значениями: - активные объявления (adss.status = 'A') - все объявления

Я пробовал что-то вроде этого:

SELECT u.*, count(c.id) as total_active, COUNT( c2.id ) AS total
FROM `users` u
LEFT join `classifieds` c ON c.user_id=u.id AND c.status = 'A'
LEFT join `classifieds` c2 ON c2.user_id=u.id
GROUP BY u.id

, но это не работает, как ожидалось

1 Ответ

6 голосов
/ 28 декабря 2011

Используйте СЛУЧАЙ внутри СЧЕТА.
В случае ELSE подразумевается NULL, который игнорируется COUNT(column)

SELECT 
   u.*, 
   count(CASE WHEN c.status = 'A' THEN c.id END) as total_active, 
   COUNT(c.id) AS total
FROM 
    `users` u
    LEFT JOIN 
    `classifieds` c ON c.user_id = u.id 
GROUP BY 
    u.id -- fix this

Кроме того, стандартный SQL предназначен для группировки или объединения столбцов: расширения MySQL GROUP BY могут давать ошибочные результаты, поскольку механизм угадывает что вы хотите.

Попробуйте этот запрос с SET SQL_MODE = 'ONLY_FULL_GROUP_BY', чтобы понять, что я имею в виду ...

...