2014-01-13 53 views
1

我正在嘗試在GROUP_CONCAT上GROUP BY一個MYSQL請求。由此GROUP_CONCAT生成的值的三個值是我必須描述要應用GROUP BY的組的唯一唯一標識符。如何在GROUP_CONCAT(DISTINCT xxx)上GROUP BY作爲yyyy

當我做到以下幾點:

SELECT [...] GROUP_CONCAT(DISTINCT xxx) as supsku 
[...] 
GROUP BY supsku 

它說:

無法小組 'supsku'

非常感謝去嘗試

回答

2

您不能按內容不存在的列進行分組,直到組成之後的。這是一個雞與雞蛋的問題。

以類推的方式,假設我要求你刮掉一些彩票,但是隻有當獲獎彩票的總價值超過100美元時才劃傷它們。很明顯,在刮彩票之前,你無法知道獲勝價值是什麼,所以你不知道你是否應該刮他們。

@MKhalidJunaid的答案顯示瞭解決方案的一部分 - 使用子查詢生成部分結果,並將字符串形成組。然後將其嵌入作爲派生表子查詢以通過具有GROUP BY的外部查詢進一步處理。

但該解決方案的問題是,我們不知道如何在內部子查詢中對字符串進行分組。如果在子查詢中沒有有效的GROUP BY,則缺省情況是將整個表視爲一個組,因此GROUP_CONCAT將使用一個字符串返回一行。

所以你需要考慮更好地定義你的問題。你必須記住一些其他的分組標準。

+0

感謝您的回答。我完全理解你的觀點。我可能會先構建一個臨時表,然後在IT上進行LEFT JOIN。再次感謝 – justberare

3

的一種方式用子選擇符

SELECT t.* FROM (
SELECT [...] GROUP_CONCAT(DISTINCT xxx) as supsku 
[...] 
) t 
GROUP BY supsku 
+0

謝謝。我用你的解決方案,但它只給我一個結果與一行中的所有連接值。 – justberare