2015-08-13 154 views
0

我有數據庫結構和數據:如何在MySQL查詢CONCAT,GROUP_CONCAT,按多子查詢

id | total | type | value_1 | value_2 
1 | 9 | 1 | 10 | 20 
2 | 9 | 1 | 21 | 30 
3 | 10 | 1 | 31 | 40 
4 | 9 | 2 | 41 | 50 
5 | 9 | 2 | 51 | 60 
6 | 8 | 2 | 61 | 70 

請幫助我如何查詢這樣的結果呢?

type || total || id ||  value 
1 || 9|10 || 1,2|3 || 10-20,21-30|31-40 
2 || 9|8 || 4,5|6 || 41-50,51-60|61-70 
+0

此刻,我只能通過總的查詢組,當試圖按 型 選擇 \t總, \t GROUP_CONCAT我有點困難(ID SEPARATOR「|」)爲ID , \t GROUP_CONCAT( \t \t CONCAT_WS( \t \t \t ' - ', \t \t \t _1, \t \t \t _2 \t \t)SEPARATOR '|' \t)AS值 FROM \t表 GROUP BY \t總 –

回答

0

這應該一旦你改變表名。訣竅是分階段構建它。首先,合併value_1value_2,然後按總數分組,然後使用,作爲分隔符,最後按|分組。

select type, 
group_concat(distinct total separator '|') as total, 
group_concat(distinct id separator '|') as id, 
group_concat(distinct vals separator '|') as vals 
from (select type, 
    group_concat(distinct total separator ',') as total, 
    group_concat(distinct id separator ',') as id, 
    group_concat(distinct vals separator ',') as vals, 
    count(id) as count 
    from (select id, total, type, concat(value_1,'-',value_2) as vals from tbl) as a 
    group by total, type order by count desc) as b 
group by type; 

我複製你的表,所以我可以測試出來

mysql> select * from tbl; 
+------+-------+------+---------+---------+ 
| id | total | type | value_1 | value_2 | 
+------+-------+------+---------+---------+ 
| 1 |  9 | 1 |  10 |  20 | 
| 2 |  9 | 1 |  21 |  30 | 
| 3 | 10 | 1 |  31 |  40 | 
| 4 |  9 | 2 |  41 |  50 | 
| 5 |  9 | 2 |  51 |  60 | 
| 6 |  8 | 2 |  61 |  70 | 
+------+-------+------+---------+---------+ 
6 rows in set (0.00 sec) 

下面是結果。

mysql> select type, 
-> group_concat(distinct total separator '|') as total, 
-> group_concat(distinct id separator '|') as id, 
-> group_concat(distinct vals separator '|') as vals 
-> from (select type, 
-> group_concat(distinct total separator ',') as total, 
-> group_concat(distinct id separator ',') as id, 
-> group_concat(distinct vals separator ',') as vals, 
-> count(id) as count 
-> from (select id, total, type, concat(value_1,'-',value_2) as vals from tbl) as a 
-> group by total, type order by count desc) as b 
-> group by type; 
+------+-------+-------+-------------------+ 
| type | total | id | vals    | 
+------+-------+-------+-------------------+ 
| 1 | 9|10 | 1,2|3 | 10-20,21-30|31-40 | 
| 2 | 9|8 | 4,5|6 | 41-50,51-60|61-70 | 
+------+-------+-------+-------------------+ 
2 rows in set, 1 warning (0.00 sec) 
+0

1型 - >總(9和10 => 9 | 10) - >總9具有的ID 1和2共有10個id 3 - > 1,2 | 3 類型2 - >總數(9和8 => 9 | 8) - >總數9有id 4和5,總數爲id 6 => 4,5 | 6 請幫我檢查一下你的查詢字符串。 –

+0

使用'|'與使用'''的規則是什麼? –

+0

我希望的結果:(請參閱美容格式的#1) type ||總|| id ||值 1 || 9 | 10 || 1,2 | 3 || 10-20,21-30 | 31-40 2 || 9 | 8 || 4,5 | 6 || 41-50,51-60 | 61-70 –