2013-07-23 3 views
-1

Предположим, у меня есть запрос mysql, который приводит к следующим строкам.MY SQL QUERY DATA ARRANGING

col1data col2data1 col3data col4data 
col1data col2data2 col3data col4data 
col1data col2data3 col3data col4data 

Обратите внимание, что данные во всех столбцах бар второй являются одинаковыми. Мой вопрос: есть ли способ, с помощью запроса, чтобы получить результаты в этом виде

col1data col3data col4data col2data1 col2data2 col2data3 

положить различные данные на той же строке?

ответ

2

Если вы хотите записи из col2 объединены в одну строку с разделителями, вы можете группа таблицы с помощью функции GROUP_CONCAT() в MySQL:

SELECT col1, col3, col4, GROUP_CONCAT(col2) 
FROM  my_table 
GROUP BY col1, col3, col4 

Посмотри на sqlfiddle.

+0

OK теперь, что если мои данные как то CREATE TABLE my_table ( col1 VARCHAR (255), col2 VARCHAR (255), col3 VARCHAR (255), COL4 VARCHAR (255) ); \t INSERT INTO my_table (col1, col2, COL3, COL4) ЗНАЧЕНИЯ ('а', 'col2data1', 'аа', 'ааа'), ('а', 'col2data2', 'аа' , 'aaa'), ('a', 'col2data3', 'aa', 'aaa'), ('b', 'col2data11', 'bb', 'bbb'), ('b', ' 'col2data22', 'bb', 'bbb'), ('b', 'col2data33', 'bb', 'bbb') ; представьте еще много строк. – Joseph

+0

@ user2515601: Тогда указанный выше запрос вернет результат для каждой отдельной комбинации '(col1, col3, col4)'. – eggyal

+0

Спасибо, хороший сэр! – Joseph

1

Реальный вопрос: знаете ли вы, сколько у вас значений для col2data?

канонический ответ использовать group_concat(), чтобы получить значения:

select col1data, col3data, col4data, group_concat(col2data) 
from t 
group by col1data, col3data, col4data; 

Это создает разделенный запятыми список. Вы можете получить фантазию и включить пробелы вместо запятых:

select col1data, col3data, col4data, group_concat(col2data separator ' ') 
from t 
group by col1data, col3data, col4data; 

Но это все еще производит всего четыре столбца.

Если вы хотите отдельный столбец для каждого из и вы знаете номер, вы можете использовать трюк на group_concat():

select col1data, col3data, col4data, 
     substring_index(group_concat(col2data order by col2data), ',', 1), 
     substring_index(substring_index(group_concat(col2data order by col2data), ',', 2), ',', -1), 
     substring_index(substring_index(group_concat(col2data order by col2data), ',', 3), ',', -1), 
from t 
group by col1data, col3data, col4data; 

Использование substring_index() позволяет извлекать элементы из списка после они объединены вместе.

+0

, но это сильно повлияет на время выполнения, не так ли? :( – Joseph

+0

@ user2515601 ... .Какой? Все они должны быть очень похожи во время выполнения. Время для группы на самом деле находится на этапе агрегации больше, чем шаг «вычислить функции». –