首页 > 解决方案 > MYSQL 查询查找 RANK

问题描述

我有 2 张桌子 PLAYER 和 MATCHES

CREATE TABLE PLAYER 
(
id int PRIMARY KEY,
name varchar(255),
salary int
);
INSERT INTO PLAYER values(1,'MOHIT',1000);
INSERT INTO PLAYER values(2,'MNOP',2000);
INSERT INTO PLAYER values(3,'ABC',100);
INSERT INTO PLAYER values(4,'XYZ',10);

CREATE TABLE MATCHES 
(
id int,
player_id int,
scores int
);
INSERT INTO MATCHES values(1,1,100);
INSERT INTO MATCHES values(2,2,52);
INSERT INTO MATCHES values(3,3,10);
INSERT INTO MATCHES values(4,1,200);
INSERT INTO MATCHES values(5,1,300);

谁能告诉我 MYSQL 查询以查找 MOHIT 为获得双世纪(200 次运行)而参加的比赛次数。

我使用了以下查询,但给了我 SQL 错误。

询问:-

 SELECT FIND_IN_SET(Select m.id from MATCHES m
  JOIN PLAYER p
  on p.id=m.player_id
  WHERE p.name='MOHIT'
  AND m.scores>=200 
  ORDER BY m.scores limit 1,(SELECT GROUP_CONCAT(
  SELECT m.id from MATCHES m 
  JOIN PLAYER p
  on p.id=m.player_id
  WHERE p.name='MOHIT'
  ))) AS RANK;

在这个查询中,我试图找到 MOHIT 得分双世纪的第一个 match_id,然后在他参加的所有比赛中找到该 match_id 的排名。

预期输出应为 2,因为 MOHIT 打了 2 场比赛得分 200 或超过 200 分。

任何帮助将不胜感激。

标签: mysqlsql

解决方案


如果我理解正确,可以使用 MYSQL COUNT() 来实现要求

SELECT COUNT(*) AS no_of_match 
FROM   matches m 
       JOIN player p 
         ON p.id = m.player_id 
WHERE  p.NAME = 'MOHIT' 
       AND m.scores >= 200;

推荐阅读