Mysql внутреннее объединение на 2 таблицы не работает

У меня есть таблица в моей базе данных с именем контакты и таблица с именем views.

На таблице контактов у меня есть следующие поля:

  • Я бы
  • статус
  • имя
  • Фамилия

Статус может быть холодным, перспективным или потерянным.

На табличных представлениях у меня есть следующие поля:

  • Идентификатор пользователя
  • art_views
  • art_title

Отношение между этими двумя таблицами — id и user_id.

Мне нужен запрос, чтобы создать новую HTML-таблицу со следующими столбцами:

  • art_title
  • холодно
  • перспектива
  • потерял

Теперь у меня есть следующий запрос (ОБНОВЛЕНО):

SELECT
v.art_title,
SUM(CASE c.status WHEN 'cold' THEN v.art_views ELSE 0 END) cold,
SUM(CASE c.status WHEN 'prospect' THEN v.art_views ELSE 0 END) prospect,
SUM(CASE c.status WHEN 'lost' THEN v.art_views ELSE 0 END) lost
FROM views v
JOIN contacts c ON v.user_id = c.id
GROUP BY v.art_title

Этот запрос работает сейчас (спасибо Gerv), но у меня все еще есть пользователи, у которых нет статуса. Поэтому я оставляю поле user_id в таблице ‘views’ пустым. Как я могу изменить запрос для этих пользователей, чтобы я тоже мог их посчитать?

Я пытался: SUM (CASE v.user_id WHEN » THEN v.art_views ELSE 0 END),
но без результата здесь.

0

Решение

Вы можете переключить логику, выбрав из таблицы представлений и присоединившись к таблице контактов.
Внизу запроса будет изменен статус с предложением CASE

SELECT
v.art_title,
SUM(CASE c.status WHEN 'cold' THEN v.art_views ELSE 0 END) cold,
SUM(CASE c.status WHEN 'prospect' THEN v.art_views ELSE 0 END) prospect,
SUM(CASE c.status WHEN 'lost' THEN v.art_views ELSE 0 END) lost,
SUM(CASE c.status WHEN NULL THEN v.art_views ELSE 0 END) no_user
FROM views v
LEFT JOIN contacts c ON v.user_id = c.id
GROUP BY v.art_title
ORDER BY (cold+lost+prospect+no_user) DESC
LIMIT 10
1

Другие решения

Пытаться

SELECT art_title, SUM(art_views), status FROM contacts AS c INNER JOIN views AS v ON v.user_id = c.id GROUP BY v.art_title, c.status

0

По вопросам рекламы [email protected]