SELECT *
From (
SELECT Count(Player_Score_Record.Player_ID) AS TotalC,
Player.First_Name
FROM Player
INNER JOIN (Match INNER JOIN Player_Score_Record
ON Match.Match_ID = Player_Score_Record.Match_ID)
ON Player.Player_ID = Player_Score_Record.Player_ID
WHERE (Match.M_Type='International' Or Match.M_Type='National')
GROUP BY Player.First_Name
ORDER BY Count(Player_Score_Record.Player_ID) DESC
) A
Where A.TotalC = 3 ;
我曾尝试Max(Count(Player_Score_Record.Player_ID) As TotalC
- 它也显示错误。
最新的尝试是使用WHERE A.TotalC = (SELECT Max(TotalC) From A);
。它显示
ORA-00942:表或视图不存在。
所以我只能直接指定3的数量(加入的最大匹配数)。
答案 0 :(得分:0)
我不确定你是否只想要:
根据比赛次数排序的球员名单。
与玩过更多比赛的玩家一起玩过多次比赛的玩家列表。
无论如何,您可以尝试以下任一解决方案。请注意这些SQL语句未经测试,因为我目前无权访问数据库。
如果是选项1,您可以使用以下SQL:
select Player.first_name, player_matches.player_id, player_matches.total_played
from (
select Player_ID, count(Match_ID) TotalPlayed
from Player_Score_Record
join Match
on Match.Match_ID = Player_Score_Record.Match_ID
where (Match.M_Type='International' Or Match.M_Type='National')
group by Player_ID
) player_matches
join Player on player_matches.player_id = player.player_id
order by player_matches.total_played desc
我们在此选择中所做的是:
Player_ID
的列表以及玩家所玩的匹配数。Player
一起加入,以获取我们想要的更多数据。total_played
进行过滤。另一方面,如果您想要尝试遵循SQL,则选项2是
select Player.first_name, Player_ID, count(Match_ID) TotalPlayed
from Player_Score_Record
join Player
on Player_Score_Record.player_id = player.player_id
group by Player_ID
having count(Match_ID) = (
select max(total_played)
from (
select Player_ID, count(Match_ID) TotalPlayed
from Player_Score_Record
join Match
on Match.Match_ID = Player_Score_Record.Match_ID
where (Match.M_Type='International' Or Match.M_Type='National')
group by Player_ID
)
我们在此选择中所做的是:
Player_ID
的列表以及玩家所玩的匹配数。答案 1 :(得分:0)
这里有两个选项:
Player_ID
个玩家玩游戏次数最多的玩家;或Oracle 11g R2架构设置:
CREATE TABLE Player
(
Player_ID PRIMARY KEY,
First_Name
) AS
SELECT 1, 'A' FROM DUAL
UNION ALL SELECT 2, 'A' FROM DUAL
UNION ALL SELECT 3, 'A' FROM DUAL;
CREATE TABLE Match
(
Match_ID PRIMARY KEY,
M_Type
) AS
SELECT 1, 'National' FROM DUAL
UNION ALL SELECT 2, 'International' FROM DUAL
UNION ALL SELECT 3, 'League' FROM DUAL;
CREATE TABLE Player_Score_Record
(
Player_ID NUMBER(1),
Match_ID NUMBER(1),
PRIMARY KEY (Player_ID, Match_ID),
FOREIGN KEY (Player_ID) REFERENCES Player (Player_ID),
FOREIGN KEY (Match_ID) REFERENCES Match (Match_ID)
);
INSERT INTO Player_Score_Record
SELECT 1,1 FROM DUAL
UNION ALL SELECT 1,2 FROM DUAL
UNION ALL SELECT 2,1 FROM DUAL
UNION ALL SELECT 2,2 FROM DUAL
UNION ALL SELECT 2,3 FROM DUAL
UNION ALL SELECT 3,2 FROM DUAL
UNION ALL SELECT 3,3 FROM DUAL;
查询1 :
WITH num_games AS (
SELECT r.Player_ID, COUNT(1) AS number_of_games_played
FROM Player_Score_Record r
INNER JOIN
Match m
ON (r.Match_ID = m.Match_ID)
WHERE m.M_Type IN ( 'National', 'International' )
GROUP BY r.Player_ID
)
SELECT Player_ID
FROM num_games
WHERE number_of_games_played = (SELECT MAX(number_of_games_played)
FROM num_games)
<强> Results 强>:
| PLAYER_ID |
|-----------|
| 1 |
| 2 |
查询2 :
WITH num_games AS (
SELECT r.Player_ID, COUNT(1) AS number_of_games_played
FROM Player_Score_Record r
INNER JOIN
Match m
ON (r.Match_ID = m.Match_ID)
WHERE m.M_Type IN ( 'National', 'International' )
GROUP BY r.Player_ID
ORDER BY number_of_games_played DESC, r.Player_ID
)
SELECT Player_ID
FROM num_games
WHERE ROWNUM = 1
<强> Results 强>:
| PLAYER_ID |
|-----------|
| 1 |