mysql - 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 分。
任何帮助将不胜感激。
解决方案
如果我理解正确,可以使用 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;
推荐阅读
- python - 已超出未经身份验证使用的 Google 日历每日限制。继续使用需要注册
- javascript - 数组中对象的 setState
- typescript - “IntrinsicAttributes & IntrinsicClassAttributes”类型不存在属性“图片”
- java - 解析来自 RestTemplate 请求的远程响应
- c++ - 在c ++中退出函数时丢失数据
- git - GitHub PR 显示没有差异,但文件不同
- ios - 在 UIAlertController 中更改 UITextField 颜色后出现白色“外边框”
- javascript - 确保在异步函数结束时不会泄露 Promise
- mysql - Eloquent:使用已删除的条目检索 pluck 集合
- c++ - 无符号类型和 C++