【问题标题】:How to get position with mysql如何使用mysql获取位置
【发布时间】:2016-03-18 06:45:22
【问题描述】:

我有一张这样的桌子:

姓名总计 Foo 7 佛巴 2 福巴尔2 2 美食吧 5 FBar 8 FBar2 8 FBar3 8 FbarL 9

我真正想要的不是这样获得职位的方法:

姓名总职位 FoBarr 2 1st FoBarr2 2 1st Foobar 5 3rd // 注意没有第二个位置 Foo 7 4th FBar 8 5th FBar2 8 5th FBar3 8 5th FbarL 9 8th // 注意没有 6th 和 7th...

我希望有一个 SQL 查询解决方案,尽管我也在开发一个 php 应用程序。

我已经搜索过了,我认为这个问题并不完全属于排名函数本身,因为如果有平局,位置不会像那样按顺序排列。

谢谢。

【问题讨论】:

  • 为什么要跳过第 2、第 6 和第 7 个?可能有一种方法可以获取相对位置 - 但如果您要跳过行,则可能必须在代码中完成。
  • Rank function in MySQL的可能重复
  • @A.Chiesa,这不是那个特定问题的重复。看到这里,例如,当两个总数相同时,该位置跳过第二个之后的位置并转到下一个
  • 请阅读第二个答案...它是重复的。你搜索的是 RANK 函数,MySQL 不直接支持,但可以模拟。你最好搜索一下。
  • @ahoffner 我跳过第 2 项,因为作为第 2 项的 FoBarr2 现在位于第 1 位,所以下一个将是第 3 位(这是一个要求) - 这也使得最后一个位置成为可能与项目总数相吻合。在这里,我有8个项目,最后的位置是第8个......

标签: php mysql


【解决方案1】:

Oooook,所以,如果这不是真正的重复,让我详细说明我之前链接的答案:

SET @prev_value = NULL;
SET @count = 0;
SET @rank_count = 0;
SELECT Name, total,
@count := @count + 1 as RowNumber,
CASE
    WHEN @prev_value = total THEN @rank_count
    WHEN @prev_value := total THEN @rank_count := @count
END AS Position
FROM rank_table
ORDER BY total

您要做的是取 2 个计数器,1 将每行增加一个,另一个将保留排名值,当值更改时重置为第一个计数器。

请参阅here 了解 SQL Fiddle。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-13
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多