Я хочу запросить результат отображения таблицы и использовать только запрос MySQL

#mysql

#mysql

Вопрос:

ТАБЛИЦА A

 ID   |   NAME
----- -------
n1   |   BLACK
n2   |   WHITE
n3   |   RED
n4   |   GREEN
  

ТАБЛИЦА B

 ID |   A_ID  |   BLABLA      |    TIME
--- --------- --------------- --------
1  |   n1    |    X          | sometime
2  |   n1    |    X          | sometime
3  |   n1    |    X          | sometime
4  |   n1    |    Y          | sometime
5  |   n1    |    Z          | sometime
6  |   n2    |    Y          | sometime
7  |   n2    |    Y          | sometime
8  |   n2    |    Y          | sometime
9  |   n3    |    X          | sometime
10 |   n3    |    Z          | sometime
11 |   n3    |    Z          | sometime
12 |   n3    |    Z          | sometime
  

Мой вопрос

Я хочу запрос для отображения результата таблицы и использовать только запрос MySQL.

РЕЗУЛЬТАТ ТАБЛИЦЫ

 NAME       |     X    |    Y    |    Z
----------- ---------- --------- -----
BLACK      |    3     |     1   |    0
WHITE      |    0     |     3   |    0
RED        |    1     |     0   |    3
GREEN      |    0     |     0   |    0
  

Комментарии:

1. исправлено ли, что у вас будут только X, Y, Z в качестве значений (или столбцов в таблице результатов)

Ответ №1:

 SELECT 
  a.name
  , sum(CASE WHEN b.blabla LIKE 'X' THEN 1 ELSE 0 END) AS X
  , sum(CASE WHEN b.blabla LIKE 'Y' THEN 1 ELSE 0 END) AS Y
  , sum(CASE WHEN b.blabla LIKE 'Z' THEN 1 ELSE 0 END) AS Z
FROM tablea a
INNER JOIN tableb b ON (a.id = b.a_id)
GROUP BY a.name
  

Я использую like вместо = , потому like что всегда нечувствителен к регистру и = не является.
Если blabla это перечисление, то я рекомендую использовать = .