开发者社区> 问答> 正文

mysql中每组的行号?mysql

我想根据这种情况生成查询结果,该方案可以根据crew_id和类型创建行号。

id crew_id amount type 1 4 1000 AUB 2 4 1500 AUB 3 5 8000 CA 4 4 1000 CA 5 5 1000 AUB 6 6 3000 AUB 7 4 2000 CA 8 6 3500 AUB 9 4 5000 AUB 10 5 9000 CA 11 5 1000 CA 输出必须为ff:

id crew_id amount type row_number 1 4 1000 AUB 1
2 4 1500 AUB 2 9 4 5000 AUB 3 4 4 1000 CA 1 7 4 2000 CA 2 5 5 1000 AUB 1 3 5 8000 CA 1 10 5 9000 CA 2 11 5 1000 CA 3 6 6 3000 AUB 1 6 6 3000 AUB 2 我只想在此输出中使用一条选择语句

展开
收起
保持可爱mmm 2020-05-17 19:41:37 881 0
1 条回答
写回答
取消 提交回答
  • 这个问题已经很老了。但是我想发布它,以防有人遇到相同的问题。

    首先,描述的答案无法正确运行。例如,对于

    id crew_id amount type 1 4 1000 AUB 2 4 1500 AUB 5 5 1000 AUB 6 6 3000 AUB 8 6 3500 AUB 9 4 5000 AUB (我刚刚删除了类型为“ CA”的行),结果表将是

    id crew_id amount rank type 1 4 1000 1 AUB 2 4 1500 2 AUB 9 4 5000 3 AUB 5 5 1000 4 AUB 6 6 3000 5 AUB 8 6 3500 6 AUB 因此,实际上它并没有同时使用crew_id和type,而只是使用type。

    这是我解决此问题的方法(可能有比使用两个嵌套的“ CASE”更优雅的方法,但是您知道了):

    SELECT id, amount, CASE crew_id WHEN @curCrewId THEN CASE type WHEN @curType THEN @curRow := @curRow + 1 ELSE @curRow := 1 END ELSE @curRow :=1 END AS rank, @curCrewId := crew_id AS crew_id, @curType := type AS type FROM Table1 p JOIN (SELECT @curRow := 0, @curCrewId := 0, @curType := '') r ORDER BY crew_id, type 主要思想仍然存在。我刚刚添加了一个变量@curCrewId。如果有人需要使用3个变量进行分组,则只需使用3个变量和3个嵌套的'CASE'。:)来源:stack overflow

    2020-05-17 19:51:17
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
One Box: 解读事务与分析一体化数据库 HybridDB for MySQL 立即下载
One Box:解读事务与分析一体化数据库HybridDB for MySQL 立即下载
如何支撑HTAP场景-HybridDB for MySQL系统架构和技术演进 立即下载

相关镜像