2013-06-19 68 views
2

只有唯一的組我有一個表。GROUP BY MySQL中的一列,但是從另一列

id title  value 
1 title_a value_z 
1 title_a value_y 
1 title_a value_x 

2 title_a value_z 
2 title_a value_y 
2 title_a value_x 

3 title_a value_z 
3 title_a value_y 
3 title_a value_w 

4 title_a value_z 
4 title_a value_y 

5 title_a value_z 
5 title_a value_y 
5 title_a value_x 
5 title_a value_w 

我要回:

1 title_a 
3 title_a 
4 title_a 
5 title_a 

換句話說,我想GROUP BY ID,但消除具有完全相同的一組「價值」的任何羣體。 (id 1和2具有相同的值x,y和z ..因此將它們分組爲1個結果)。標題現在無關緊要。

我可以想像的答案如此簡單,但不能爲我的生活弄清楚如何編寫查詢。我已經嘗試了所有的分組依據,DISTINCTs,和子查詢,我可以想像,但它通過ID儘快似乎I組,有沒有辦法來檢查的「價值」集合的唯一性。

請幫助我,堆棧溢出,你是我唯一的希望......

+0

應該怎樣顯示,如果標題將與ID = 1個 – Uriil

回答

1

您可以使用GROUP_CONCAT拉平的value每個ID。

SELECT 
    id, 
    title, 
    GROUP_CONCAT(DISTINCT value ORDER BY value) AS AllValues 
FROM myTable 
GROUP BY id, title 

其結果將是這樣的:

id  title  AllValues       
------ --------- --------------------------------- 
    1 title_a value_x,value_y,value_z   
    2 title_a value_x,value_y,value_z   
    3 title_a value_w,value_y,value_z   
    4 title_a value_y,value_z     
    5 title_a value_w,value_x,value_y,value_z 

將這個變成一個子查詢,並採取ID的MINtitleMIN,通過AllValues分組,你會得到想要的結果:

SELECT 
    MIN(id) AS MinID, 
    MIN(title) AS MinTitle 
FROM (
    SELECT 
    id, 
    title, 
    GROUP_CONCAT(DISTINCT value ORDER BY value) AS AllValues 
    FROM myTable 
    GROUP BY id, title 
) FlattenTitles 
GROUP BY AllValues 
ORDER BY MinID 

注意,MIN爲標題是猜測;你可以具有確定值不同,其title選擇其它邏輯。

我測試過此查詢,我試圖將其添加爲SQL小提琴,但SQLFiddle網站給我一個奇怪的錯誤,我不明白這裏在家。

+0

好傢伙行不同!太棒了!它的工作非常完美。你,先生吉布斯,是互聯網上最美麗的人。期。我永遠明白你的債務。非常感謝! – LucasJay

+0

我很高興它的工作 - 和偉大的問題! –