2017-02-08 1 views
0

У меня есть таблица с данными, похожими на таблицу нижеMySQL получить определенное значение в течение двух столбцов

id c1 c2 

1 a b 
2 e f 
3 b d 
4 x e 

Я хочу, чтобы получить distint значения в течение два колонки и их суммы тоже. Мой ожидаемый результат:

a 1 
b 2 
d 1 
e 2 
f 1 
x 1 

Первый столбец - это общие отличительные значения, а второй столбец - время наступления. Как получить его в MYSQL?

+1

Делают UNION ALL, GROUP BY его результат. – jarlh

+0

Не могли бы вы написать примерный ответ в ответах – Shafiq

+0

Почему бы вам не попробовать сами. Хороший способ учиться! – jarlh

ответ

1

Как jarlh сказал в комментариях, вы можете сделать это с помощью UNION ALL подзапроса:

SELECT col, COUNT(*) 
FROM 
(
    SELECT c1 AS col FROM thetable 
    UNION ALL 
    SELECT c2 AS col FROM thetable 
) T 
GROUP BY col 
0

Вы можете сделать это путем создания временной таблицы:

Из вашего примера:

select * from Table1; 
+------+------+------+ 
| col1 | col2 | col3 | 
+------+------+------+ 
| 1 | a | b | 
| 2 | e | f | 
| 3 | b | d | 
| 4 | x | e | 
+------+------+------+ 

Создать временную таблицу:

create temporary table dummy (col1 text); 

Вставить в таблице значений TEMP из таблицы:

insert into dummy select col2 from Table1; 

insert into dummy select col3 from Table1; 

Теперь TEMP стол:

select * from dummy; 
+------+ 
| col1 | 
+------+ 
| a | 
| e | 
| b | 
| x | 
| b | 
| f | 
| d | 
| e | 
+------+ 

Теперь ваш ожидаемый результат:

select distinct col1 , count(*) from dummy group by col1; 
+------+----------+ 
| col1 | count(*) | 
+------+----------+ 
| a |  1 | 
| b |  2 | 
| d |  1 | 
| e |  2 | 
| f |  1 | 
| x |  1 | 
+------+----------+