2015-06-09 54 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