我需要找出客户的等级。在这里,我为我的需求添加了相应的ANSI标准SQL查询。请帮助我将其转换为MySQL。
SELECT RANK() OVER (PARTITION BY Gender ORDER BY Age) AS [Partition by Gender],
FirstName,
Age,
Gender
FROM Person
有什么功能可以找出MySQL的排名吗?
一种选择是使用排名变量,例如:
SELECT first_name,
age,
gender,
@curRank := @curRank + 1 AS rank
FROM person p, (SELECT @curRank := 0) r
ORDER BY age;
该(SELECT @curRank := 0)
部分允许变量初始化,而无需单独的SET
命令。
测试用例:
CREATE TABLE person (id int, first_name varchar(20), age int, gender char(1));
INSERT INTO person VALUES (1, 'Bob', 25, 'M');
INSERT INTO person VALUES (2, 'Jane', 20, 'F');
INSERT INTO person VALUES (3, 'Jack', 30, 'M');
INSERT INTO person VALUES (4, 'Bill', 32, 'M');
INSERT INTO person VALUES (5, 'Nick', 22, 'M');
INSERT INTO person VALUES (6, 'Kathy', 18, 'F');
INSERT INTO person VALUES (7, 'Steve', 36, 'M');
INSERT INTO person VALUES (8, 'Anne', 25, 'F');
结果:
+------------+------+--------+------+
| first_name | age | gender | rank |
+------------+------+--------+------+
| Kathy | 18 | F | 1 |
| Jane | 20 | F | 2 |
| Nick | 22 | M | 3 |
| Bob | 25 | M | 4 |
| Anne | 25 | F | 5 |
| Jack | 30 | M | 6 |
| Bill | 32 | M | 7 |
| Steve | 36 | M | 8 |
+------------+------+--------+------+
8 rows in set (0.02 sec)
问题内容: 我需要创建一个自动在结果中添加虚拟行号的视图。这里的图完全是随机的,我要实现的是动态创建的最后一列。 查询: 问题答案: 采用: 这不是理想的方式,因为将对返回的每一行执行num值查询。更好的主意是创建一个表,其中的一列包含一个从一个开始的数字,然后递增到一个非常大的数字,然后以类似于下面的变量示例的方式联接和引用该表。 MySQL排名,或缺乏 您可以定义一个变量以获得伪行号功能,因为
问题内容: 我有一个表格播放器的以下表格结构 假设玩家ID和得分具有有效值,是否可以基于单个查询中的得分数量来更新所有玩家的排名?如果两个人的分数相同,则应该并列。 更新: 我正在使用建议作为本机查询的查询使用hibernate模式。Hibernate不喜欢使用变量,尤其是’:’。有人知道任何解决方法吗?是通过不使用变量,还是在这种情况下通过使用HQL解决hibernate的限制? 问题答案: 一
问题内容: 我有一个包含3个字段的表,我想根据user_id和game_id对列进行排名。 这是SQL Fiddle:http ://sqlfiddle.com/#!9/883e9d/1 我已经在桌子上了: 预期产量: 到目前为止,我的努力: 编辑:( 来自OP 注释):排序基于的降序 game_detail的顺序 问题答案: 在派生表(子句内的子查询)中,我们对数据进行排序,以使所有具有相同值的
问题内容: 以下是我所拥有的 我想要的是如下 注意: 我在输出下面创建的代码, 代码是 我希望用户6具有as 而不是 问题答案: 那这个呢?
问题内容: 我完全为在mysql中从rank()over(按x分区,按y desc排序)创建新列“ LoginRank”而感到困惑。 从SQL Server,我将编写以下查询,以创建按“登录”分组并按“ id”排序的“ Loginrank”列。 我有下表。 我尝试将许多现有的mysql修复程序应用到我的数据集,但仍然存在问题。 任何帮助是极大的赞赏。谢谢! 问题答案: 请尝试以下查询:-MySql
null 本质上,我要查询的是该实体的前20名。有了mysql和一个cron工作,我每分钟都在更新hotscore。因此,热得分不能适用于分区键。我在试着看看我是否能在搬到C*之前做到这一点。据我所知,像这样的主键不太好,因为这意味着C*必须扫描每个条目。