0

2 つのテーブルがあるとします。

TABLE: team
-----------
| team_id |
===========
| 1       |
-----------
| 2       |
-----------

TABLE: team_member
-------------------------------------------
| team_member_id | team_id | age | gender |
===========================================
| 1              | 1       | 20  | Male   |
-------------------------------------------
| 1              | 2       | 25  | Male   |
-------------------------------------------
| 1              | 2       | 23  | Female |
-------------------------------------------

次のようなものを検索するにはどうすればよいですか。

  1. 18 歳から 25 歳までの男性のみの全チームのリスト。
  2. 男女とも 18 歳から 25 歳までのすべてのチームのリスト。
  3. 等。

私は基本的に、のすべての子レコードに特定のフィルター (年齢など) を適用する方法に関する一般的な戦略を探していますteam。提案?

4

4 に答える 4

1

チーム、team_member

すべて男性またはすべて女性のチームのみをチェックする場合、単純な WHERE 句を適用することはできません。チーム メンバーの完全なセットと比較する必要があります。試す

select 
      tm.team_id,
      sum( if( tm.gender = 'Male' AND tm.age between 18 and 25, 1, 0 )) as MaleInRange,
      count(*) AllTeamMembers
  from
      team_member tm
  group by
      tm.Team_ID
  having
      MaleInRange = AllTeamMembers

同様に、男性と女性の両方を確保するには...

select 
      tm.team_id,
      sum( if( tm.age between 18 and 25, 1, 0 )) as AgeInRange,
      sum( if( tm.gender = 'Male', 1, 0 )) as MaleCnt,
      sum( if( tm.gender = 'Female', 1, 0 )) as FemaleCnt,
      count(*) AllTeamMembers
  from
      team_member tm
  group by
      tm.Team_ID
  having
         AgeInRange = AllTeamMembers
     AND MaleCnt > 0
     AND FemaleCnt > 0
于 2012-06-04T10:47:52.330 に答える
0

ところでteam_member_id は一意である必要があります。そうしないと、この列は役に立ちません!!

男女とも 18 歳から 25 歳までのすべてのチームのリスト。

SELECT * FROM team_member WHERE Age BETWEEN 18 AND 25 GROUP BY team_id.

結果

| team_member_id | team_id | age | gender |
===========================================
| 1              | 1       | 20  | Male   |
-------------------------------------------
| 1              | 2       | 25  | Male   |
-------------------------------------------
于 2012-06-04T04:26:19.287 に答える
0

次のようなものです - SELECT * FROM t1 WHERE key_col > 1 AND key_col < 10;

この例を確認してください - http://www.roseindia.net/sql/mysql-example/mysql-range.shtml。それが役に立てば幸い!

于 2012-06-04T03:05:16.377 に答える
0

以下のように実行できます:
1. SELECT * FROM T2 WHERE Gender='Male' and Age BETWEEN 18 AND 25.
2. SELECT * FROM T2 WHERE Age BETWEEN 18 AND 25.
それが役に立てば幸い!

于 2012-06-04T03:20:03.843 に答える