我在运行查询排名时遇到问题。 内部SELECT根据排名顺序给出行,对于每一行,变量@rank增加,如果不是等于先前排名的位置。 但@rank并不是真正的正确位置。MySQL查询动态“排行”
我试图做一个排名分组和按最高价值排序。
SET @prev := NULL;
SET @curr := NULL;
SET @rank := 0;
SELECT
@prev := @curr,
@curr := SUM(a.value) AS SUM_VALUES,
@rank := IF(@prev = @curr, @rank, @rank+1) AS rank,
b.id AS b_id,
b.name AS b_nome
FROM
a INNER JOIN b ON (a.b_id = b.id)
GROUP BY b.id
ORDER BY SUM_VALUES DESC;
结果:
----------------------------------------------------
@prev := @curr | SUM_VALUES | rank | b_id | b_nome
---------------|------------|------|-------|--------
NULL | 10 | 2 | 2 | BBB
NULL | 2 | 1 | 1 | AAA
这里BBB是摆在首位,以返回排名和AAA,第二排名。 但是这不会发生,发生了什么的一个想法?
测试转储
CREATE TABLE `a` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`b_id` INT(10) NULL DEFAULT NULL,
`value` INT(10) NULL DEFAULT NULL,
`name` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `b_id` (`b_id`),
CONSTRAINT `fk_b` FOREIGN KEY (`b_id`) REFERENCES `b` (`id`)
)
ENGINE=InnoDB;
CREATE TABLE `b` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NULL DEFAULT NULL,
PRIMARY KEY (`id`)
)
ENGINE=InnoDB;
INSERT INTO `b` (`id`, `name`) VALUES (1, 'AAA');
INSERT INTO `b` (`id`, `name`) VALUES (2, 'BBB');
INSERT INTO `a` (`id`, `b_id`, `value`, `name`) VALUES (1, 1, 2, 'smaller');
INSERT INTO `a` (`id`, `b_id`, `value`, `name`) VALUES (2, 2, 10, 'bigger');
结果是什么,你要* *?这不是很清楚。此外,它还可以帮助将您的示例简化为一个非常简单的数据集,它可以演示您的问题,而无需使用与问题无关的一堆表,列和过滤器。这个问题有太多可以处理,这可能是你为什么没有得到任何回应。 – mellamokb
好的,我试图简化 –