在对mysql查询进行排名时如何处理联系?在此示例中,我简化了表名和列,但它可以说明我的问题:
SET @rank=0;
SELECT student_names.students,
@rank := @rank +1 AS rank,
scores.grades
FROM student_names
LEFT JOIN scores ON student_names.students = scores.students
ORDER BY scores.grades DESC
因此,假设上面的查询产生了:
Students Rank Grades
=======================
Al 1 90
Amy 2 90
George 3 78
Bob 4 73
Mary 5 NULL
William 6 NULL
即使Al和Amy的成绩相同,一个人的排名也比另一个高。艾米被偷走了。我如何才能使Amy和Al具有相同的排名,以使他们俩的排名都为1。而且,William和Mary没有参加考试。他们挤在教室里,在男孩的房间里抽烟。他们应该并列最后的位置。
正确的排名应该是:
Students Rank Grades
========================
Al 1 90
Amy 1 90
George 2 78
Bob 3 73
Mary 4 NULL
William 4 NULL
如果有人有任何建议,请告诉我。
编辑 :这是MySQL 4.1+支持
采用:
SELECT st.name,
sc.grades,
CASE
WHEN @grade = COALESCE(sc.grades, 0) THEN @rownum
ELSE @rownum := @rownum + 1
END AS rank,
@grade := COALESCE(sc.grades, 0)
FROM STUDENTS st
LEFT JOIN SCORES sc ON sc.student_id = st.id
JOIN (SELECT @rownum := 0, @grade := NULL) r
ORDER BY sc.grades DESC
您可以使用交叉连接(在MySQL中为不带任何条件的INNER JOIN)来声明和使用变量,而无需使用单独的SET
语句。
您需要COALESCE来正确处理NULL。
我正在尝试在MySQL工作台的结果网格中对检索到的数据进行排序。 例如,使用查询 当我在列和 到SQL查询? 或者,尽管用户界面在列刻度和时间平移上显示了一个箭头,但是MySQL Workbench还是在多个列上进行排序?
问题内容: 我对MYSQL相对较新,遇到了困扰我一段时间的问题。我已经尝试在所有地方使用Google搜索来寻找答案,但到目前为止仍无法找到可接受的解决方案。 这是我当前正在运行的查询,用于查找给定搜索词的最佳匹配项: 它返回的结果是全面的,因为它们包括所有相关的行。但是,它们没有按照任何特定的顺序排序,我希望在用PHP打印结果时首先显示完全匹配的匹配项。像这样: 1 | 字<精确匹配 2 | 填字
我目前有一个查询,它使用MongoTemplate的findAll()方法返回集合中的所有文档。我想对这些结果进行排序,但看不到任何方法。我看到我可以使用find()和一个查询参数并调用。with(Sort Sort),但是在这个场景中,我如何设置查询以返回所有文档?我会同意使用任何一种方法。
我有一个MongoDB集合,它有1000万个数据。我有两个主要字段(字符串类型)和(整数类型)。这两个字段都已编入索引,但是当我在 find 语句之后对结果进行排序时,mongo 需要花费大量时间来返回结果。 如何从find语句中快速排序结果?
问题内容: 正在搜寻 这不起作用....我到处搜索并阅读了文档。但是我只是看不到如何根据他们的“所有者”关系名称对我的(基础)查询进行排序。 它总是导致: 这一定很容易…但是我看不到。还研究了比较器,这似乎合乎逻辑,但是我看不到ORDER BY的查询部分在哪里生成或我应该返回什么,因为所有内容都是动态生成的。为每个“玩家”关系做一个比较器来做一件简单的事情似乎过于复杂。 问题答案: SQLAlch
问题内容: 假设我们有一个这样的数据库: Project_tbl: personel_project_tbl: instrument_project_tbl: 现在,我需要对项目列表进行排序,并根据它们与项目A的相似性对其进行排名。 例如: A和B在3个用户中共有1个用户,在2个工具中有2个用户,因此它们的相似度排名是(1/2 + 2/2)/ 2 = 75% A和C没有共同的用户,但拥有2台以上的