0

我有表(mysql 5.5 INNODB):样本小数据+剪切不相关的问题列 - 真实数据巨大(会议表中超过 10,000,000 行)

输入:

day:

day_id(primary key)|sunday|monday|tuesday|wensday|thursday|friday|saturday
---------------------------------------------------------------------------
60                 |1     |1     |1      |1      |1       |1    |1
74                 |0     |1     |0      |0      |0       |0     |0
98                 |0     |0     |0      |0      |0       |0     |0
..etc......................................................................

meeting:

day_id(foreign key)|time    |type
----------------------------------
60                 |20:09:00|1
98                 |07:00:00|1
74                 |22:01:00|4
98                 |10:00:00|1
60                 |23:09:00|2
98                 |06:00:00|2
74                 |21:04:00|6
98                 |08:00:00|6
.....etc.....................

输出:

sunday_times          |monday_times                           |....etc
-------------------------------------------------------------------------------------------------
20:09:00,etc...       | 20:09:00,etc..   |
................etc..............................................................................

我想是这样的(但我是 sql 新手,所以我不知道它是好还是合法)

 SELECT 
   GROUP_CONCAT(time where day.sunday=1 ORDER BY time) as sunday_times, 
   GROUP_CONCAT(time where day.monday=1 ORDER BY time) as monday_times,  
   etc..
 FROM day
 JOIN meeting ON meeting.day_id=day.day_id
 GROUP BY type
4

1 回答 1

7

您的语法很接近,您需要在以下内容中使用CASE语句GROUP_CONCAT()

SELECT 
   GROUP_CONCAT(case when day.sunday=1 then time end order by time) as sunday_times, 
   GROUP_CONCAT(case when day.monday=1 then time end order by time) as monday_times
 FROM day
 JOIN meeting ON meeting.day_id=day.day_id
GROUP BY type

请参阅带有演示的 SQL Fiddle

于 2012-10-05T11:37:38.450 回答