簡體   English   中英

MySQL - 為具有不同條件的組中的每一行獲取count()

[英]MySQL - Get count() for each row in a group with different condition

我有一個高分表scores: (id int, deviceid int, value int, board int) 我想為特定玩家展示一個位置。 目前我正在這樣做(在PHP中):

我選擇所有玩家都有得分和得分的棋盤:

select board, min(value) as value
from scores
where deviceid = 1234
group by board

然后對於每一行($ board,$ value)我選擇:

select count(id) from scores
where board = $board and value < $value

通過選擇得分低於指定值的特定棋盤的行數,我得到玩家的位置(第一個玩家獲得位置0,所以當顯示時它將增加1)

我知道這是非常低效的,所以我正在尋找一種更快的方法 它可以在帶有光標的存儲過程中完成,但對於100個板,我需要做最多1 + 100次選擇。

簡而言之,我想在偽sql中做這樣的事情:

select board, min(value) as val,
       count(id) from _this_group_ where value < val
from scores
where deviceid = 1234
group by board
SELECT scores.board, count(1) AS position
FROM scores
JOIN
  (SELECT board, MIN(value) AS value
   FROM scores
   WHERE deviceid = 1234
   GROUP BY board
  ) player_scores
ON scores.board = player_scores.board
WHERE scores.value < player_scores.value
GROUP BY scores.board

您可以嘗試以下方式:

SELECT a.board, b.val COUNT(1) AS cnt
FROM scores a
    INNER JOIN(
        SELECT board, MIN(value) as val
        FROM scores
        WHERE deviceid = 1234
        GROUP BY board
    ) b
     ON a.board = b.board
    AND a.value < b.val
WHERE a.deviceid = 1234
GROUP BY a.board;

要么

SELECT a.board, MIN(a.value) as val,
       (SELECT COUNT(1)
        FROM scores b
        WHERE b.board = a.board AND
        b.value < MIN(a.value)) AS cnt
FROM scores a
WHERE a.deviceid = 1234;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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