mysql casewhen 多列数据如何排名
时间: 2023-07-26 20:36:36 浏览: 87
如果你想根据多列 `CASE WHEN` 的结果进行排名,可以使用 `ORDER BY` 子句对这些列进行排序。以下是一个示例:
```
SELECT column1, column2,
CASE WHEN condition1 THEN result1 ELSE result2 END AS my_result1,
CASE WHEN condition2 THEN result3 ELSE result4 END AS my_result2
FROM my_table
ORDER BY my_result1 DESC, my_result2 ASC;
```
在这个例子中,我们在 `SELECT` 语句中使用了两个 `CASE WHEN` 表达式,并将它们分别命名为 `my_result1` 和 `my_result2`。然后,在 `ORDER BY` 子句中,我们首先按照 `my_result1` 列进行降序排序,然后按照 `my_result2` 列进行升序排序。
你可以根据需要调整 `ORDER BY` 子句以实现所需的排序顺序。
相关问题
mysql casewhen 三列数据如何在新的三列实现对其排名
如果你想在新的三列中实现基于多列 `CASE WHEN` 的排名,可以将这些 `CASE WHEN` 表达式作为子查询,并在外部查询中使用 `ORDER BY` 子句对新的三列进行排序。以下是一个示例:
```
SELECT column1, column2,
CASE WHEN condition1 THEN result1 ELSE result2 END AS my_result1,
CASE WHEN condition2 THEN result3 ELSE result4 END AS my_result2,
CASE WHEN condition3 THEN result5 ELSE result6 END AS my_result3
FROM (
SELECT column1, column2,
CASE WHEN condition1 THEN result1 ELSE result2 END AS my_result1,
CASE WHEN condition2 THEN result3 ELSE result4 END AS my_result2,
CASE WHEN condition3 THEN result5 ELSE result6 END AS my_result3
FROM my_table
) subquery
ORDER BY my_result1 DESC, my_result2 ASC, my_result3 DESC;
```
在这个例子中,我们首先在子查询中使用了三个 `CASE WHEN` 表达式,并将它们分别命名为 `my_result1`、`my_result2` 和 `my_result3`。然后,在外部查询中,我们使用 `ORDER BY` 子句对这些列进行排序,以实现所需的排名效果。
你可以根据需要调整 `ORDER BY` 子句以实现所需的排序顺序。
mysql casewhen 语句多列数据如何分别显示排名位次
如果你想在结果集中将基于多列 `CASE WHEN` 的排名位次分别显示在不同的列中,可以使用 MySQL 的用户变量来实现。以下是一个示例:
```
SET @rank1 = 0;
SET @rank2 = 0;
SET @rank3 = 0;
SELECT column1, column2,
@rank1 := IF(my_result1 = @prev_result1, @rank1, @rank1 + 1) AS rank1,
@prev_result1 := my_result1 AS prev_result1,
@rank2 := IF(my_result2 = @prev_result2, @rank2, @rank2 + 1) AS rank2,
@prev_result2 := my_result2 AS prev_result2,
@rank3 := IF(my_result3 = @prev_result3, @rank3, @rank3 + 1) AS rank3,
@prev_result3 := my_result3 AS prev_result3
FROM (
SELECT column1, column2,
CASE WHEN condition1 THEN result1 ELSE result2 END AS my_result1,
CASE WHEN condition2 THEN result3 ELSE result4 END AS my_result2,
CASE WHEN condition3 THEN result5 ELSE result6 END AS my_result3
FROM my_table
ORDER BY my_result1 DESC, my_result2 ASC, my_result3 DESC
) subquery,
(SELECT @rank1 := 0, @prev_result1 := NULL, @rank2 := 0, @prev_result2 := NULL, @rank3 := 0, @prev_result3 := NULL) init
```
在这个例子中,我们首先使用 `SET` 语句初始化三个用户变量 `@rank1`、`@rank2` 和 `@rank3`,并将它们都设置为 0。然后,我们在查询中使用这些变量来计算排名位次。
具体地说,我们使用了 `IF` 函数和逻辑运算符来比较当前行的 `my_result` 值和前一行的 `my_result` 值,以确定当前行的排名位次。我们还使用了 MySQL 的变量赋值语句 `:=` 来将当前行的 `my_result` 值保存到 `@prev_result` 变量中,以便在下一行中进行比较。
最后,我们使用了一个子查询和一个 `JOIN` 子句来将用户变量初始化为 0。这是必需的,因为用户变量在会话结束前会一直存在,如果不初始化它们,可能会影响后续查询的结果。
请注意,这种方法可能会影响查询性能,因为它涉及到变量赋值和条件判断等操作。如果你需要处理大量数据或需要更高的查询性能,请考虑使用其他高级技术,如窗口函数等。
阅读全文