簡體   English   中英

尋找最常被擊中的人

[英]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;

http://sqlfiddle.com/#!4/03ba0/22

試試這個: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM