#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
это перечисление, то я рекомендую использовать =
.