2015-06-09 84 views
0

與像數據開始聚集條款如下:MySQL查詢超過幾個條件

clubType desiredShape lineDirection 
--------------------------------------- 
driver  straight  left 
driver  draw   straight 
iron  straight  right 
wedge  straight  straight 
iron  fade   right 
wedge  straight  straight 
iron  fade   left 
iron  draw   straight 

我想編寫一個查詢,可以返回:

  • 計數desiredShape =「畫」
  • count desiredShape =「straight」
  • count desiredShape =「fade」
  • count lineDirection =「left」
  • 數將lineDirection = 「直」
  • 數將lineDirection = 「右」

每各clubType

所以,我試圖做這樣的事情:

SELECT 
    clubType, 
    (SELECT count(*) FROM shots WHERE desiredShape = "fade") as count_DesiredFade, 
    (SELECT count(*) FROM shots WHERE desiredShape = "draw") as count_DesiredDraw, 
    (SELECT count(*) FROM shots WHERE desiredShape = "straight") as count_DesiredStraight 
    ... 
FROM shots 
GROUP BY clubType 

但它不是對。不知道如何迭代clubtype並彙總其他計數。

我想用這樣的事情結束了:

clubType desDraw desFade desStraight lineLeft lineRight lineRight 
----------------------------------------------------------------------------- 
driver  3   2   4    3   2   1 
iron  4   1   2    4   2   1 
wedge  1   3   2    1   0   2 

回答

1

使用一個布爾表達式返回1(TRUE)或0(FALSE)或NULL。用SUM()聚合包裝,這樣你就可以得到布爾表達式爲TRUE的行的「計數」。

例如:

SELECT t.clubType 
    , SUM(t.desiredShape = 'fade') as count_DesiredFade 
    , SUM(t.desiredShape = 'draw') as count_DesiredDraw 
    , SUM(t.desiredShape = 'straight') as count_DesiredStraight 
    , ... 
    FROM shots t 
GROUP BY t.clubType 

注:表達t.desired_shape = 'fade'相當於

IF(t.desired_shape = 'fade',1,IF(t.desired_shape IS NULL,NULL,0)) 

或更符合ANSI標準

CASE WHEN t.desired_shape = 'fade' 
     THEN 1 
     WHEN t.desired_shape IS NULL 
     THEN NULL 
     ELSE 0 
    END 
+0

釘它第一次嘗試。好工作 – Kristian