2016-04-16 3 views
0

私はsqlの初心者です。どのプレイヤーが複数のチームを持っているかどうかをチェックする方法はわかりません。テーブルを作成した後どのプレイヤーが1つのチームしか持っていないかをチェックする方法

CREATE TABLE TEAM(TeamID varchar(10), 
        PlayerID varchar(10) REFERENCES "Player" ("playerID"), 
        TeamName varchar(15)); 

そして値:

INSERT INTO Team VALUES ('t001', 'p001','teamname1'); 

INSERT INTO Team VALUES ('t001', 'p002','teamname1'); 

INSERT INTO Team VALUES ('t002', 'p003','teamname2'); 

INSERT INTO Team VALUES ('t002', 'p002','teamname2'); 

あなたが見ることができるように:プレイヤー2は、より多くのチームと他の人が一つだけのチームを持っています。しかし、それを見ることができると私はどのように書いていますか?

答えて

0
Select COUNT(PlayerId) 
from Team 
where PlayerId = 'some Id'; 

これは、プレイヤーが参加チームの数を返します。

1

次のクエリを使用してカウントを取得することができます

Select playerId,count(TeamId) from TEAM group by playerId having count(teamId)>=1 
+0

多分、私のsqliteは、チームからplayerIDに最初のものを変更した後に別のものになります(それ以外の場合はエラーが発生します)。 !これらの回答はすべてここでは偉大なものです。 –

0

いくつかの解決策は、すべてのチーム内のすべてのプレーヤーと彼らは

にあるチームの数の正確

一覧を欲しいものに応じて、いくつかのチーム

Select playerId,count(*) 
from TEAM 
group by playerId 
ORDER BY count(*) DESc 

| PlayerID | count(*) | 
|----------|----------| 
|  p002 |  2 | 
|  p001 |  1 | 
|  p003 |  1 | 

プレイヤーのみ

SELEcT playerId,count(*) 
FROM TEAM 
GROUP BY playerId 
HAvING count(*) > 1 
ORDER BY count(*) DESc 

| PlayerID | count(*) | 
|----------|----------| 
|  p002 |  2 | 
人の

チーム内の選手、そして、彼らは

さらに
SELEcT playerId,count(*) , GROUP_concat(Teamname) AS teams 
FROM TEAM 
GROUP BY playerId 
ORDER BY count(*) DESc 

| PlayerID | count(*) |    teams | 
|----------|----------|---------------------| 
|  p002 |  2 | teamname1,teamname2 | 
|  p001 |  1 |   teamname1 | 
|  p003 |  1 |   teamname2 | 

にあるチーム、彼らはチームにアレント場合でも、あなたはすべてのプレイヤーが必要な場合は、同じクエリを作るが、私はいないであろうFROM Players LEFT JOIN Teamsとすべきですあなたのプレイヤーテーブルを表示していないのでもっと秘密にしてください