2016-02-18 24 views
0

遵循的是樣品臺選擇哪個值是目前最次數列在MySQL的

Project | Reporter | Fixer | Status  
--------+----------+--------+-------- 
P1  | Fernando | Janith | closed 
P1  | hasitha | Nimna | Fixed  
p1  | Amal  | Nimna | Fixed  
P2  | Nimal | Amal | Fixed  
P3  | Kamal | Nimal | Fixed  
P4  | Andrew | Amal | Fixed 

我要的是項目名稱,狀態數爲每個項目,每個項目的狀態的計數「固定」,項目狀態'已關閉'的計數和固定最多項目數的固定器。

除了加粗部分我可以用下面的查詢

SELECT Project 
    ,count(Project) AS ProjectCount 
    ,count(CASE STATUS 
      WHEN 'Fixed' 
       THEN 1 
      ELSE NULL 
      END) AS Fixed 
    ,count(CASE STATUS 
      WHEN 'Closed' 
       THEN 1 
      ELSE NULL 
      END) AS Closed 
FROM TABLE 
GROUP BY Project; 

輸出我需要

Project, ProjectCount, Fixed, Closed, Fixcer  
P1,   3,   2,  1,  Nimna 
+1

,你遇到了什麼問題?你目前的代碼不起作用? – dfundako

+0

你爲什麼輸出沒有p2,p3和p4? –

+0

我假設你想要的東西像SELECT COUNT(1)從tbl WHERE STATUS ='Fixed'GROUP BY Fixer。 –

回答

1

這裏的問題是將選擇第一個固定器與大多數出現在項目上,但沒有處理關係。所以你應該提供一條規則來處理關係。

SQL Fiddle Demo

SELECT Project 
    ,count(Project) AS ProjectCount 
    ,count(CASE STATUS 
      WHEN 'Fixed' 
       THEN 1 
      ELSE NULL 
      END) AS Fixed 
    ,count(CASE STATUS 
      WHEN 'Closed' 
       THEN 1 
      ELSE NULL 
      END) AS Closed 
    , (SELECT fixer 
     FROM Table1 B 
     WHERE A.`Project` = B.`Project` 
     GROUP BY fixer 
     ORDER BY COUNT(*) DESC 
     LIMIT 1 
    ) as Fixer 
FROM TABLE1 A 
GROUP BY Project; 

輸出

| Project | ProjectCount | Fixed | Closed | Fixer | 
|---------|--------------|-------|--------|-------| 
|  P1 |   3 |  2 |  1 | Nimna | 
|  P2 |   1 |  1 |  0 | Amal | 
|  P3 |   1 |  1 |  0 | Nimal | 
|  P4 |   1 |  1 |  0 | Amal | 
+0

感謝胡安正是我需要的 –

+0

正如我所說的只是要小心,因爲如果兩個Fixer具有相同的計數將返回一個隨機定影劑。 –

0

如果只想用最次的項目信息,以獲得他人,使用此查詢:

SELECT 
    P1.Project, 
    COUNT(*) ProjectCount, 
    SUM(P1.Status = 'Fixed') Fixed, 
    SUM(P1.Status = 'Closed') Closed, 
    (SELECT COUNT(*) cnt 
     FROM Project P2 
     WHERE P1.Project = P2.Project AND P2.Status = 'Fixed' 
     GROUP BY P2.Fixer 
     ORDER BY cnt DESC 
     LIMIT 1) 
FROM Project P1 
GROUP BY P1.Project; 

如果您需要所有項目的信息,請使用這一個:

SELECT 
    P1.Project, 
    COUNT(*) ProjectCount, 
    SUM(P1.Status = 'Fixed') Fixed, 
    SUM(P1.Status = 'Closed') Closed, 
    (SELECT COUNT(*) cnt 
     FROM Project P2 
     WHERE P1.Project = P2.Project AND P2.Status = 'Fixed' 
     GROUP BY P2.Fixer 
     ORDER BY cnt DESC 
     LIMIT 1) 
FROM Project P1 
GROUP BY P1.Project 
ORDER BY ProjectCount DESC 
LIMIT 1;