我有一个复杂的查询,需要在其中排名。我了解到这样做的标准方法是使用此页面上的技术:http: //thinkdiff.net/mysql/how-to-get-rank-using-mysql-query/。我使用 Infobright 作为后端,但它并没有像预期的那样工作。也就是说,虽然标准的 MySQL 引擎会将排名显示为 1、2、3、4 等...... Brighthouse(Infobright 的引擎)会返回 1、1、1、1 等......所以我想出了一种设置变量、函数,然后在查询中执行的策略。这是一个概念验证查询,它就是这样做的:
SET @rank = 0;
DROP FUNCTION IF EXISTS __GetRank;
DELIMITER $$
CREATE FUNCTION __GetRank() RETURNS INT
BEGIN
SET @rank = @rank + 1;
return @rank;
END$$
DELIMITER ;
select __GetRank() AS rank, id from accounts;
然后我将该函数复制并粘贴到 Jasper Report 的 iReport 中,然后编译我的报告。执行后,出现语法错误。所以我想也许是;把它扔掉了。所以在查询的顶部,我输入了 DELIMITER ;。这也不起作用。
我想做的甚至可能吗?如果是这样,怎么做?如果有一种 Infobright 方法可以在不编写函数的情况下获得排名,我也会对此持开放态度。