SQL选择值出现x次的行

时间:2014-09-29 07:12:11

标签: sql

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,那么查询几乎会返回我想要的内容,但是有一些游戏中只有三个玩家记录了协助。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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;