2015-06-09 2 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 = «рисовать»
  • счетчик desiredShape = "прямой"
  • счетчик desiredShape = "замирания"
  • счетчик lineDirection = "левый"
  • граф 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 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

Смежные вопросы