例如我有一个这样的表:
name rating matei 124 andrei 20 serj 25 john 190 mike 96 andy 245 tom 73
我需要输出这样的东西(按评级排序):
约翰的立场是2;或者,汤姆的位置是5; (我不需要得到所有结果,只需一个)我怎样才能做到这一点?
提前致谢
答案 0 :(得分:2)
除非使用ORDER BY子句显式指定排序,否则MySQL不保证查询结果中的行顺序。如果您有一些单独的排序列,则可以使用如下查询:
SELECT count(1) as position
FROM table
WHERE order_column <= {john's order_column value};
如果您没有订购栏,我建议您先定义,“约翰的位置”和“汤姆的位置”是什么意思。
<强>更新强> AFAIU,你想获得按评级排序的列表中的位置(对不起,我最初没有得到它)。所以,评级将是您的order_column。在这种情况下,你应该决定,如果两个人有相同的评级(谁的位置更高?),你如何计算位置。
因此,查询可能会以下列方式查看:
SELECT count(1) as position
FROM table
WHERE
rating > (SELECT rating FROM table WHERE id={user's ID});
答案 1 :(得分:1)
SELECT COUNT(*) + 1
FROM users
WHERE (rating, name) <
(
SELECT rating, name
FROM users
WHERE name = 'john'
)
请注意,如果您在名称和评分上都有重复项,则此查询会为这两个分配相同的评分。
答案 2 :(得分:0)
在数据库文献中,表格更正式地称为relations - 它们不保证是有序的(它们是“元组”集合),所以你的问题没有意义。如果您需要依赖订单/位置,则需要定义一个额外的列(如自动递增ID列)来捕获和存储该信息。
答案 3 :(得分:0)
答案 4 :(得分:0)
抵消不起作用吗?
SELECT * FROM Table ORDER BY rating DESC LIMIT 1,6
这将返回已被6行设置的1行?或者我错了,语法将是
SELECT * FROM Table ORDER BY rating DESC LIMIT 1 , {{POS}}