在这个问题上我会得到任何帮助的。我已经花了好几个小时没有任何真正的解决办法。我有一个SQL
SELECT to_place, rank
FROM
(SELECT g1.to_place as to_place, g1.pcount as pcount,
@rank := IF(@current_to_place = g1.to_place, @rank + 1, 1) AS rank,
@current_to_place := g1.to_place
FROM
(select
to_place, count(*) as pcount
from temp_workflows
group by to_place
order by to_place,pcount desc) g1
ORDER BY g1.to_place, g1.pcount DESC) ranked
在表g1中,我对我的数据进行分组,以找到to_place最常见的情况,然后我想按升序排列这些情况(这样我以后就可以在每个to_place类别中选择最常见的前3个)。
问题是用户定义的变量是不可预测的(@rank有时总是1),这可能与这样一个事实有关,即在一个语句中,我不应该引用同一个变量(current_to_place)。我读了很多关于使用单独的语句等,但我可以找到一种方法,以一种不同的方式来写我的语句。我如何在别处定义@current_to_place以使结果相同?事先谢谢你的帮助。
我认为您应该测试pcount以获得rank,并且应该初始化变量
DROP TABLE IF EXISTS T;
CREATE TABLE T
(to_place int);
insert into t values (1),(2),(2),(3),(3),(3);
SELECT to_place, rank
FROM
(
SELECT g1.to_place as to_place, g1.pcount as pcount,
@rank := IF(@current_to_place <> pcount, @rank + 1, 1) AS rank,
@current_to_place := pcount
FROM
(select
to_place, count(*) as pcount
from t
group by to_place
order by to_place,pcount desc) g1
cross join(select @rank:=0,@current_to_place:=0) r
ORDER BY g1.pcount DESC
)
ranked
+----------+------+
| to_place | rank |
+----------+------+
| 3 | 1 |
| 2 | 2 |
| 1 | 3 |
+----------+------+
3 rows in set (0.016 sec)