2014-09-29 65 views
0
SELECT Opponent, JerseyNumber, A 
FROM (SELECT * FROM Games_t INNER JOIN GameStats_t ON Games_t.GameID=GameStats_t.GameID) 
WHERE A >=1 AND COUNT(Opponent) >3; 

我試圖返回那些至少有三名玩家錄製了一個或多個助手的遊戲。如果我沒有AND COUNT(Opponent) >3,那麼查詢幾乎可以返回我想要的內容,但是有幾個遊戲只有三名玩家錄製了幫助。在查詢SQL選擇出現x次值的行

+0

請提供樣本輸入和輸出數據 – 2014-09-29 07:15:51

回答

0

使用HAVING欄目查詢完成後,使用一些參數:

SELECT Opponent, JerseyNumber, A 
FROM (SELECT * FROM Games_t INNER JOIN GameStats_t ON Games_t.GameID = GameStats_t.GameID) 
WHERE A >=1 HAVING COUNT(Opponent) > 3; 
+0

我得到一個錯誤sa ying對手是聚合函數的一部分 – 2014-09-29 07:18:19

1

使用下面的查詢。

SELECT G_TEMP.GAME_ID, GT.OPPONENT, GT.JERSEYNUMBER, G.A FROM 
(
     SELECT GAME_ID, COUNT(OPPONENT) OPP_COUNT FROM GAMESTATS_T 
     HAVING COUNT(OPPONENT) > 3 
     GROUP BY GAME_ID 
) G_TEMP 
LEFT OUTER JOIN 
    GAMES_T G 
    ON 
    G.GAME_ID = G_TEMP.GAME_ID 
    AND G.A > 1 
    INNER JOIN 
      GAMESTATS_T GT 
      ON 
      G.GAME_ID = GT.GAME_ID 

Working SQL Fiddle HERE


注1:當有一個以上的表,它始終是最好使用tablename_alias.field_name語法指定領域。這是一個很好的做法,但它是可選的。

例如,如果表TABLEA有場FIELDA1,FIELDA2,FIELDA3如果表TABLEB有場FIELDB1,FIELDB2

然後你可以使用查詢作爲:

SELECT A.FIELDA1, A.FIELDA3, B.FIELDB2 
FROM TABLEA A JOIN TABLEB B ON A.FIELDA2 = B.FIELDB2 
+0

它說GameID不是聚合函數的一部分 – 2014-09-29 07:20:47

+0

@WilliamSmolen:檢查工作SQL小提琴。我猜這是你在找什麼。 – 2014-09-29 07:40:42

+0

我正在MS Access中工作 - 該片段會引發有關左外連接上缺少表達式的錯誤。 – 2014-09-29 08:00:58

1

試試這個:

SELECT Opponent, 
      JerseyNumber, 
      A, 
      COUNT(Opponent) FROM 
      (
      SELECT * 
      FROM Games_t INNER JOIN GameStats_t 
      ON Games_t.GameID=GameStats_t.GameID 
     ) 
     WHERE A >=1 
     GROUP BY Opponent, JerseyNumber, A 
     HAVING COUNT(Opponent) >3 
+1

請讓我知道它是否有效 – 2014-09-29 07:28:41

+0

這可行,但我可能會格式化我的條件錯誤。我需要選擇'對手'值出現的行至少4次 – 2014-09-29 07:32:37

+0

在最後一行使它 HAVING COUNT(Opponent)> = 4 – 2014-09-29 07:38:05