2015-09-19 2 views
0

Как узнать уникальное значение из таблицы? А потом я хочу рассчитывать каждое уникальное значение соответствующего для этого столбца в MySQL ..Как узнать уникальное значение из таблицы, а затем подсчитать каждое уникальное значение в MySQL

таблицы Имя: - туЬаЫе

+---------+---------+---------+---------+---------+ 
| column1 | column2 | column3 | column4 | column5 | 
+---------+---------+---------+---------+---------+ 
| car  | train | plane | tempo | laptop | 
| bike | pen  | car  | Null | pencil | 
| tempo | book | car  | laptop | book | 
| Null | bike | tempo | book | pen  | 
+---------+---------+---------+---------+---------+ 
+1

Просьба уточнить, что вы ищете. –

+0

очень интересно :) –

+0

У меня была таблица значений .. поэтому сначала я хочу найти уникальные значения из всех столбцов. Затем, используя эти значения, я хочу подсчитать каждое значение. Пример: - автомобиль является отличным значением в таблице, тогда число «автомобиль» равно 1 в столбце 1, 0 в столбце 2 и т. Д. ... – user3074158

ответ

0

Вашего стол не выглядит нормализуется, так что я думаю, вы должны использовать лучшую структуру , но без какого-либо контекста я не могу предложить вам, как его улучшить. Для того, чтобы решить вашу проблему, то вы могли бы использовать некоторые UNION ВСЕ запросы, а затем GROUP BY

SELECT value, column, COUNT(*) 
FROM (
    SELECT column1 AS value, "Column1" AS Column 
    FROM mytable 
    UNION ALL 
    SELECT column2 AS value, "Column2" AS Column 
    FROM mytable 
    UNION ALL 
    SELECT column3 AS value, "Column3" AS Column 
    FROM mytable 
    UNION ALL 
    SELECT column4 AS value, "Column4" AS Column 
    FROM mytable 
) s 
GROUP BY value, column 
ORDER BY value, column 

, если вы хотите, чтобы все значения в столбцах, то вы можете использовать это:

SELECT 
    value, 
    MAX(CASE WHEN column='Column1' THEN cnt END AS cnt_1, 
    MAX(CASE WHEN column='Column2' THEN cnt END AS cnt_2, 
    MAX(CASE WHEN column='Column3' THEN cnt END AS cnt_3, 
    MAX(CASE WHEN column='Column4' THEN cnt END AS cnt_4 
FROM (
    SELECT value, column, COUNT(*) AS cnt 
    FROM (
    SELECT column1 AS value, "Column1" AS Column 
    FROM mytable 
    UNION ALL 
    SELECT column2 AS value, "Column2" AS Column 
    FROM mytable 
    UNION ALL 
    SELECT column3 AS value, "Column3" AS Column 
    FROM mytable 
    UNION ALL 
    SELECT column4 AS value, "Column4" AS Column 
    FROM mytable 
) AS s 
    GROUP BY value, column 
    ORDER BY value, column 
) AS s 
GROUP BY value 
+0

@ user3074158 Пожалуйста, взгляните на мой обновленный ответ – fthiella

+0

его не работает – user3074158

0

Учитывая таблицу выше, и предполагается, вы хотите, чтобы найти различные значения column1, вот отправная точка:

SELECT column1, count(column1) FROM myTable GROUP BY column1 

sqlfiddle here

Все колонны вместе с профсоюзом:

SELECT col, count(col) FROM (
    SELECT column1 as col FROM myTable UNION ALL 
    SELECT column2 as col FROM myTable UNION ALL 
    SELECT column3 as col FROM myTable UNION ALL 
    SELECT column4 as col FROM myTable UNION ALL 
    SELECT column5 as col FROM myTable 
) as x GROUP BY x.col 

Новый sqlfiddle

+0

Я хочу отличные значения из всех пяти столбцов, а не из столбца1. – user3074158

+0

Изменить запрос –

+0

как это работает..и хотите выход в 6 столбцах – user3074158

0

Это то, что вы искали?

SQL Fiddle

MySQL 5.5 Настройка схемы:

CREATE TABLE table_name 
(
    column_1 VARCHAR (20), 
    column_2 VARCHAR (20), 
    column_3 VARCHAR (20), 
    column_4 VARCHAR (20), 
    column_5 VARCHAR (20)); 

insert into table_name values 
('car','train','plane','tempo','laptop'); 
insert into table_name values 
('bike','pen','car',Null,'pencil'); 
insert into table_name values 
('tempo','book','car','laptop','book'); 
insert into table_name values 
(Null,'bike','tempo','book','pen'); 

Запрос 1:

select col, Count(*) from ( 
select distinct column_1 as col from table_name 
union all 
select distinct column_2 as col from table_name 
union all 
select distinct column_3 as col from table_name 
union all 
select distinct column_4 as col from table_name 
union all 
select distinct column_5 as col from table_name) as newTable 
group by col 

Results:

| col | Count(*) | 
|--------|----------| 
| (null) |  2 | 
| bike |  2 | 
| book |  3 | 
| car |  2 | 
| laptop |  2 | 
| pen |  2 | 
| pencil |  1 | 
| plane |  1 | 
| tempo |  3 | 
| train |  1 | 
+0

Я хочу, чтобы счет во всех пяти столбцах не был в одном Count (*) – user3074158

+0

ожидается в следующем формате: - отдельное значение (счет) column1 (количество) column2 (count in) (count in) column3 (count in) column4 (count in) column5 – user3074158

0

В соответствии с @ fthiella-х логики здесь есть ответ, и я уверен, что это то, что вы действительно хотели :)

SQL Fiddle

MySQL 5.5 Схема установки:

CREATE TABLE table_name 
(
    column_1 VARCHAR (20), 
    column_2 VARCHAR (20), 
    column_3 VARCHAR (20), 
    column_4 VARCHAR (20), 
    column_5 VARCHAR (20)); 

insert into table_name values 
('car','train','plane','tempo','laptop'); 
insert into table_name values 
('bike','pen','car',Null,'pencil'); 
insert into table_name values 
('tempo','book','car','laptop','book'); 
insert into table_name values 
(Null,'bike','tempo','book','pen'); 

Запрос 1:

SELECT valueX, columnX, COUNT(*) 
FROM (
    SELECT column_1 AS valuex, "Column_1" AS Columnx 
    FROM table_name 
    UNION ALL 
    SELECT column_2 AS valuex, "Column_2" AS Columnx 
    FROM table_name 
    UNION ALL 
    SELECT column_3 AS valuex, "Column_3" AS Columnx 
    FROM table_name 
    UNION ALL 
    SELECT column_4 AS valuex, "Column_4" AS Columnx 
    FROM table_name 
) s 
GROUP BY valuex, columnX 
ORDER BY valuex, columnX 

Results:

| valuex | Columnx | COUNT(*) | 
|--------|----------|----------| 
| (null) | Column_1 |  1 | 
| (null) | Column_4 |  1 | 
| bike | Column_1 |  1 | 
| bike | Column_2 |  1 | 
| book | Column_2 |  1 | 
| book | Column_4 |  1 | 
| car | Column_1 |  1 | 
| car | Column_3 |  2 | 
| laptop | Column_4 |  1 | 
| pen | Column_2 |  1 | 
| plane | Column_3 |  1 | 
| tempo | Column_1 |  1 | 
| tempo | Column_3 |  1 | 
| tempo | Column_4 |  1 | 
| train | Column_2 |  1 | 
+0

Я хочу 6 столбцов на выходе..может у, пожалуйста, помогите мне – user3074158

0

Я надеюсь, это то, что вы наконец-то искать. все самое лучшее :)

SQL Fiddle

MySQL 5.5 Схема установки:

CREATE TABLE table_name 
(
    column_1 VARCHAR (20), 
    column_2 VARCHAR (20), 
    column_3 VARCHAR (20), 
    column_4 VARCHAR (20), 
    column_5 VARCHAR (20)); 

insert into table_name values 
('car','train','plane','tempo','laptop'); 
insert into table_name values 
('bike','pen','car',Null,'pencil'); 
insert into table_name values 
('tempo','book','car','laptop','book'); 
insert into table_name values 
(Null,'bike','tempo','book','pen'); 

Запрос 1:

SELECT 
    valuex, 
    SUM(IFNULL(ELT(FIELD(Columnx, 'Column_1'), 1), 0)) as Column_1, 
    SUM(IFNULL(ELT(FIELD(Columnx, 'Column_2'), 1), 0)) as Column_2, 
    SUM(IFNULL(ELT(FIELD(Columnx, 'Column_3'), 1), 0)) as Column_3, 
    SUM(IFNULL(ELT(FIELD(Columnx, 'Column_4'), 1), 0)) as Column_4, 
    SUM(IFNULL(ELT(FIELD(Columnx, 'Column_5'), 1), 0)) as Column_5 
FROM (
    SELECT column_1 AS valuex, "Column_1" AS Columnx 
    FROM table_name 
    UNION ALL 
    SELECT column_2 AS valuex, "Column_2" AS Columnx 
    FROM table_name 
    UNION ALL 
    SELECT column_3 AS valuex, "Column_3" AS Columnx 
    FROM table_name 
    UNION ALL 
    SELECT column_4 AS valuex, "Column_4" AS Columnx 
    FROM table_name 
    UNION ALL 
    SELECT column_5 AS valuex, "Column_5" AS Columnx 
    FROM table_name 
) s 
group by valuex 

Results:

|--------|----------|----------|----------|----------|----------| 
| valuex | Column_1 | Column_2 | Column_3 | Column_4 | Column_5 | 
|--------|----------|----------|----------|----------|----------| 
| (null) |  1 |  0 |  0 |  1 |  0 | 
| bike |  1 |  1 |  0 |  0 |  0 | 
| book |  0 |  1 |  0 |  1 |  1 | 
| car |  1 |  0 |  2 |  0 |  0 | 
| laptop |  0 |  0 |  0 |  1 |  1 | 
| pen |  0 |  1 |  0 |  0 |  1 | 
| pencil |  0 |  0 |  0 |  0 |  1 | 
| plane |  0 |  0 |  1 |  0 |  0 | 
| tempo |  1 |  0 |  1 |  1 |  0 | 
| train |  0 |  1 |  0 |  0 |  0 | 
Смежные вопросы