当前位置: 首页 > 知识库问答 >
问题:

ranking语句中的用户定义变量

澹台俊材
2023-03-14

在这个问题上我会得到任何帮助的。我已经花了好几个小时没有任何真正的解决办法。我有一个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以使结果相同?事先谢谢你的帮助。

共有1个答案

柯镜
2023-03-14

我认为您应该测试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)
 类似资料:
  • 我不太明白java中语句的定义。我在网上读了很多页,还有其他问题,但没有一个能给我一个准确的答案。 我们这里有多少陈述? 我想说,这是一个声明。然而,我们也可以这样写: 这是两个声明,对吗?

  • 我目前正在学习Java,作为其中的一部分,我正在尝试制作一个随机数生成器。 该项目仍处于早期阶段,但当我制作错误检查组件时,我遇到了一些问题,我一直在想为什么它不能以这种方式工作。 下面是错误检查器,它接收numberAmount(用户请求的随机数的数量)和randomDigit(随机数的最大位数)。 我想让它在数量或数字过高时进行标记,这可能会导致应用程序崩溃。 下面是代码。 当我不插入

  • 用户定义变量 数据库支持用户自定义变量,自定义变量使用@开头,能够被用于任何表达式和参数中。变量是不能持久的,作为范围为 session,这就意味着变量只在定义它的那个 session 里是有效的。一个变量通常使用 SET命 令来声明: SET @USER = 'Joe'; 变量也可以通过使用 SET() 方法来改变值。在查询中可以直接使用: SET @TOTAL = NULL; SELECT

  • 1.1. 用户语句(user_says) 1.2. 用户语句(user_says)类型 1.1. 用户语句(user_says) 为意图配置任何可能的用户语句,形成映射关系。例如,我们对意图中定义的JSON进行完善: { "intents": [ { "intent": "bestcoffeebar", "slots": [ { "name": "

  • 我有任务加载类别(按名称加载)和子类别中的所有产品。使用MySQL后,我创建了SQL查询: 正如你在类别名称中提到的“工具”。它工作得很好,但如果你有任何建议-你非常欢迎。在我的项目中,我正在使用Hibernate,名为Query。问题在于变量@pv。现在它未被编译,并将异常作为“意外令牌…”抛出有人知道如何在NamedQuery中使用变量吗?

  • 找到价格最高和最低的信息: mysql> SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop; mysql> SELECT * FROM shop WHERE [email protected]_price OR [email protected]_price; +---------+--------+-------+ |