当前位置: 首页 > 知识库问答 >
问题:

用于从两个表中获取排行榜的sql查询

孟宏才
2023-03-14

我有两个MySql表用户和标记

用户表:

+-----------+--------------+------+-----+---------+----------------+
| Field     | Type         | Null | Key | Default | Extra          |
+-----------+--------------+------+-----+---------+----------------+
| id        | int          | NO   | PRI | NULL    | auto_increment |
| firstName | varchar(255) | YES  |     | NULL    |                |
| lastName  | varchar(255) | YES  |     | NULL    |                |
| email     | varchar(55)  | YES  |     | NULL    |                |
+-----------+--------------+------+-----+---------+----------------+

标记表

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int          | NO   | PRI | NULL    | auto_increment |
| user_id      | int          | NO   |     | NULL    |                |
| subject_id   | varchar(255) | YES  |     | NULL    |                |
| score        | int          | YES  |     | NULL    |                |
| subject_name | varchar(225) | YES  |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

我想按降序获取得分最高的前10名用户的详细信息(userid、firstName和lastName)。用户分数定义为用户在不同科目的所有分数之和。

我真的很困惑在这里使用哪个连接,我是MySql新手,这个查询对我来说有点挑战性,希望你理解这个问题。如果你有任何建议,请告诉我,谢谢

共有2个答案

叶元凯
2023-03-14

您应该将表用户id上的表标记与表标记中的用户id进行内部连接:

SELECT user_id, firstName, lastName 
FROM User
INNER JOIN Marks
ON User.id = Marks.user_id

下面是SQL连接的有用资源

朱渝
2023-03-14

您可以通过id=user_id将两个表连接在一起,然后将结果按id分组,按每个id的总标记排序,然后取前10个结果。

如果您想要一个结果,即使user根本没有标记,将JOIN更改为LEFT JOIN,这仍然会给您一个来自第一个表的结果,即使没有来自第二个表的结果...

SELECT u.id, u.firstName, u.lastName, SUM(m.score) AS TotalScore
FROM [User] AS u
JOIN Marks AS m ON m.user_id = u.id
GROUP BY u.id, u.firstName, u.lastName
ORDER BY SUM(m.score) DESC
LIMIT 10;
 类似资料:
  • 问题内容: 我想在我的SQL查询中将结果返回为- 我有一个名为employee的表,其列名称,薪水,地址。该查询应返回employee表中的前两个最高列值。 这应该是单个查询。 问题答案: 如果最高的列是,请执行以下操作: 您将对其他任何列执行相同的操作,只需在和部分中替换列名称即可。

  • 问题内容: 我有两个表: 这是表1: 这是表2: 现在,我想从这些表中获取数据。在两个表中都相同。 我想拿 和其他表。 请帮我做到这一点。 问题答案: 我假设您在第二个表中有一个命名字段(您没有列出它): 您应该查看有关的MySQL手册,因为这是编写SQL查询的非常基本的部分。您也可以考虑为product_id字段添加索引,以使查询运行更快。

  • 获取全站粉丝排行 获取财富达人排行 获取全站收入排行 获取全站粉丝排行 根据全站的用户粉丝数进行的排序 GET /ranks/followers 传入参数 名称 类型 必填 说明 limit int - 数据返回条数 默认10条 offset int - 偏移量 默认为0 响应 Http Status 200 Ok [ { "id": 1, "name": "baishi"

  • 获取资讯排行 获取资讯排行 根据一定时间内的资讯获得的浏览量量进行的排序 GET /news/ranks 传入参数 名称 类型 必填 说明 limit int - 数据返回条数 默认10条 type string - 筛选类型 day - 日排行 week - 周排行 month - 月排行 offset int - 偏移量 默认为0 响应 Http Status 200 Ok [ {

  • 获取解答排行 获取问答达人排行 获取社区专家排行 获取解答排行 根据一定时间内发布的回答数进行的排序 GET /question-ranks/answers 传入参数 名称 类型 必填 说明 limit int - 数据返回条数 默认10条 type string - 筛选类型 day - 日排行 week - 周排行 month - 月排行 offset int - 偏移量 默认为0 响应 H

  • 获取动态排行 获取动态排行 根据一定时间内的动态获得的点赞量进行的排序 GET /feeds/ranks 传入参数 名称 类型 必填 说明 limit int - 数据返回条数 默认10条 type string - 筛选类型 day - 日排行 week - 周排行 month - 月排行 offset int - 偏移量 默认为0 响应 Http Status 200 Ok [ {