2014-07-09 41 views
0

我有一個如下的sql表數據。MySQL:按同一列中的值查詢和分組

c_type_id | s_id | value 
    1 | 11 | Winx32 
    1 | 12 | Domain1 
    2 | 11 | Winx64 
    2 | 12 | Domain2 
    3 | 11 | Winx32 
    3 | 12 | Domain1 
    4 | 11 | Winx32 
    4 | 12 | Domain2 

如何查詢和分組以獲得以下結果。

countall | platform | domain 
     2 | Winx32 | Domain1 
     1 | Winx64 | Domain2 
     1 | Winx32 | Domain2 
+0

@Illidanek它有點是:-( – Strawberry

回答

0
SELECT COUNT(*) countall, 
     p.value platform, 
     d.value domain 
FROM mytable p 
JOIN mytable d 
ON  (d.c_type_id, d.s_id) = (p.c_type_id, 12) 
WHERE p.s_id = 11 
GROUP BY 
     d.c_type_id 
+0

謝謝你,這一個爲我工作。 – rupeshj

1

你需要轉動表來獲得在單獨的列平臺和域,然後就可以用COUNTGROUP BY

SELECT COUNT(*) AS countall, platform, domain 
FROM (SELECT MAX(CASE WHEN s_id = 11 THEN value END) AS platform, 
      MAX(CASE WHEN s_id = 12 THEN value END) AS domain 
     FROM YourTable 
     GROUP BY c_type_id) AS pivoted 
GROUP BY platform, domain 
0

假設你的表名是 '測試1',這將是您的解決方案:

SELECT COUNT(*) AS countall, t1a.value AS platform, t1b.value AS domain 
FROM test1 AS t1a 
LEFT JOIN test1 AS t1b 
     ON t1b.c_type_id = t1a.c_type_id 
WHERE t1a.s_id = 11 
    AND t1b.s_id = 12 
GROUP BY t1a.value, t1b.value 

在MySQL服務器v5.5.37測試

最好的問候, speedbomb

相關問題