2014-09-15 6 views
1

У меня есть таблица, как:Mysql разделить колонну на несколько столбцов

id | cat | price 
---------------------- 
    0 | 1 | 2 
    0 | 2 | 1 
    0 | 1 | 1 
    1 | 1 | 31 
    1 | 2 | 5 
---------------------- 

мне нравится, чтобы выбрать это нравится:

id | cat1_price | cat2_price 
---------------------------------- 
    0 |  3  |  1 
    1 |  31  |  5 
---------------------------------- 

Мой запрос до сих пор:

SELECT SUM(`price`) as cat1_price FROM price_table WHERE cat = 1 GROUP BY id 

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

Я также пытался что-то вроде:

SELECT SUM(`price`) as cat1_price 
(SELECT SUM(`price`) FROM price_table WHERE cat = 2) as cat2_price 
FROM price_table WHERE cat = 1 GROUP BY id 

, который работает слишком медленно. Фактическая таблица довольно большая и имеет некоторые соединения.

Я не гуру SQL, так что я надеюсь, что есть запрос на это я не в курсе :)

+0

Почему вы хотите это сделать ? (отдельный бит столбца, я имею в виду) – Strawberry

+0

его только для видимого (сортируемого) вывода таблицы – 77120

+0

Сортировка таблицы? - Вы имеете в виду то, что сделано с ajax и php? – Strawberry

ответ

4

Просто используйте условную агрегацию:

SELECT id, SUM(case when cat = 1 then `price` else 0 end) as cat1_price, 
     SUM(case when cat = 2 then `price` else 0 end) as cat1_price 
FROM price_table 
GROUP BY id; 
Смежные вопросы