Используйте это:
SELECT IF(h.host != 'other', h.host, e.other) as the_host, COUNT(e.*) AS hostcount
FROM host h
LEFT JOIN event e ON h.eventid = e.id
GROUP BY the_host
Просто заметка, не используйте COUNT(*)
, если у хоста нет события, он будет показывать 1 вместо 0. Используйте COUNT(e.*)
Для последнего результата используйте это:
SELECT h.host, e.other, COUNT(e.*) AS hostcount
FROM host h
LEFT JOIN event e ON h.eventid = e.id
GROUP BY IF(h.host != 'other', h.host, e.other),
h.host, e.other -- try repeating it here
[EDIT]
Попробовал следующий запрос (т. Е. Без предложенного повторения полей в GROUPBY), он также работает на ваш оригинальный вопрос и ваш отредактированный вопрос.Я только что установил MySQL сейчас, я не знаю, имеет ли он отношение к типу базы данных, я только включил InnoDB и строгие настройки.Кстати, COUNT(e.*)
(который, как я полагаю, принят ANSI SQL) не работает на MySQL, вместо этого необходимо использовать COUNT(e.id)
(или, возможно, вы уже исправили свой запрос):
SELECT h.host, e.other, COUNT(e.id) AS hostcount
FROM host h
LEFT JOIN event e ON h.eventid = e.id
GROUP BY IF(h.host != 'other', h.host, e.other)
-- note: i removed the suggested repeating of fields here, it works on my box here.
-- Settings: InnoDB and strict mode