[英]Finding person with most frequent hit
我是 SQL 的新手,正在嘗試學習它。 我遇到的一個問題是如何在表中找到某個人的最大特定出現次數。 我不確定查詢將如何將每個 ID 與另一個 ID 進行比較並跟蹤計數。 糟糕的解釋,但這里有一個數據集,希望能讓它更清楚。
players:
+--------+--------+
| pid | name |
+--------+--------+
| 1 | Tom |
| 2 | Sam |
| 3 | Dan |
+--------+--------+
scores:
+--------+--------+--------+
| sid | pid | result |
+--------+--------+--------+
| 1 | 1 | miss |
| 2 | 1 | hit |
| 3 | 3 | hit |
| 4 | 2 | miss |
| 5 | 3 | hit |
| 6 | 3 | hit |
+--------+--------+--------+
預期的答案是 pid = 3,name = Dan,因為他在所有其他玩家中的點擊率最高。
Select
p.pid,
p.name
From (
Select
p.pid,
p.name,
count(*)
From
players p
inner join
scores s On
p.pid = s.pid
Where
result = 'hit'
Group By
p.pid,
p.name
Order By
count(*) Desc
) p
Where
rownum = 1;
試試這個: SQLFiddle Demo
select pid, hits from(
Select p.pid, count(*) as hits FROM players p
JOIN scores s
ON p.pid = s.pid AND s.result = 'hit'
GROUP BY p.pid
ORDER By count(*) DESC
)
Where rownum <= 1
這也可能是一個解決方案:
select
players.pid,
players.name
from
scores inner join players
on scores.pid = players.pid
and scores.result = 'hit'
group by players.pid, players.name
having count(*)=(select max(cnt)
from
(select pid, count(*) as cnt
from scores
where result='hit'
group by pid) t)
請注意,如果他們都有相同的點擊次數,這將返回多個玩家。 還要注意,如果玩家出現在分數表中但不在玩家表中,則不會顯示。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.