2014-12-04 199 views
0

在任何人評論之前,我沒有用逗號分隔值設計這個數據庫:) 我花了時間試圖找到答案,但我能找到的所有東西都是GROUP_CONCAT(),它似乎做了與我想要的相反。MySQL GROUP BY每個逗號分隔值

我想GROUP BY中的每個逗號分隔值域中的值。

SELECT round(avg(DATEDIFF(dateClosed , dateAded) * 1.0), 2) AS avg, department 
FROM tickets GROUP BY assignedto 

的assignedto字段是逗號分隔值字段

row1 54,69,555 
row2 54,75,555 
row3 75,555 

期望的輸出:平均圓形圖形爲在分組assignedto字段的每個值。

編輯 - 嘗試將此項納入下一級別: 我想包含機票答案表以獲得該機票的第一個響應,使用其datetime字段計算出每個用戶的平均響應時間。

SELECT a.id as theuser, round(avg(DATEDIFF(ta.dateAded , t.dateAded) * 1.0), 2) as avg 
FROM tickets t join 
    mdl_user a 
    on find_in_set(a.id, t.assignedto) > 0 
INNER JOIN (SELECT MIN(ta.dateAded) as started FROM ticketanswer GROUP BY ta.ticketId) ta ON t.id = ta.ticketId 
GROUP BY a.id ORDER BY avg ASC 
+0

你的問題不是很清楚。嘗試張貼您的票據表的一些樣本數據和所需的輸出數據。 – 2014-12-04 11:50:12

+1

將csv('assingnto')轉換回行嗎? [11100501 /分逗號分隔值從 - 一列對2-行-內式結果的MySQL的](https://stackoverflow.com/questions/11100501/split-comma-separated-值從一列到二行的結果mysql) – 2014-12-04 11:57:55

+0

創建一個包含票證ID和單個值的表格。如果門票持有修改時間,那也是。 [用於分割字符串,請參閱此處](http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/)。把事情簡單化。 – 2014-12-04 12:05:43

回答

2

Yuck。你可以這樣做,假設你知道分配的最大數量。下面是一個方法:

select substring_index(substring_index(assignedto, ',', n.n), ',', -1) as assignedto, 
     round(avg(DATEDIFF(dateClosed , dateAded) * 1.0), 2) as avg 
from tickets t join 
    (select 1 as n union all select 2 union all select 3) 
    on length(assignedto) - length(replace(assignedto, ',', '')) < n.n 
group by substring_index(substring_index(assignedto, ',', n.n), ',', -1); 

或者,更簡單的方法,如果您有指定值的列表,說在AssignedTo表:

select a.assignedto, round(avg(DATEDIFF(dateClosed , dateAded) * 1.0), 2) as avg 
from tickets t join 
    assignedto a 
    on find_in_set(a.assignedto, t.assignedto) > 0 
group by a.assignedto; 

對不起,你必須處理這個畸形數據庫結構。

+0

非常好,非常感謝。我用第二個,因爲我有一個用戶表加入到 – Codded 2014-12-04 12:32:04

+0

請看我的編輯有你的想法? – Codded 2014-12-04 12:56:03

+0

@Codded。 。 。你應該問這是另一個問題,而不是對已經回答的問題的編輯。 – 2014-12-04 13:00:47