首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ROW_NUMBER()将行号添加到MySQL显示

如何使用ROW_NUMBER()将行号添加到MySQL显示
EN

Stack Overflow用户
提问于 2019-06-11 16:26:44
回答 1查看 68关注 0票数 0

如何使用ROW_NUMBER()函数(必选)在Mysql表格显示中显示行号?

代码语言:javascript
复制
mysql> select * from work;
+------+-----------+
| name | work_days |
+------+-----------+
| john |         5 |
| jane |         7 |
| jane |         2 |
| john |         3 |
+------+-----------+
4 rows in set (0.01 sec)

不使用ROW_NUMBER():

代码语言:javascript
复制
mysql> SELECT name, 
    -> AVG(work_days) AS workday_average, 
    -> COUNT(*) as count
    -> FROM work
    -> GROUP BY name
    -> HAVING workday_average > 2
    -> ORDER BY workday_average ASC, count DESC;
+------+-----------------+-------+
| name | workday_average | count |
+------+-----------------+-------+
| john |          4.0000 |     2 |
| jane |          4.5000 |     2 |
+------+-----------------+-------+
2 rows in set (0.00 sec)

尝试使用ROW_NUMBER()添加行号列时出现以下错误。

代码语言:javascript
复制
mysql> SELECT name, 
    -> ROW_NUMBER() over(PARTITION BY name ORDER BY work_days) as row_num,
    -> AVG(work_days) AS workday_average, 
    -> COUNT(*) as count
    -> FROM work
    -> GROUP BY name
    -> HAVING workday_average > 2
    -> ORDER BY workday_average ASC, count DESC;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(PARTITION BY name ORDER BY work_days) as row_num,
AVG(work_days) AS workday_ave' at line 2
mysql> 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-11 16:31:49

窗口函数在GROUP BY聚合发生后进行计算,因此在name上使用分区没有多大意义,因为此时将保证每个记录都有一个不同的名称。最有可能的是,你想要这样的东西:

代码语言:javascript
复制
SELECT
    name, 
    ROW_NUMBER() OVER (ORDER BY AVG(work_days), COUNT(*) DESC) AS row_num,
    AVG(work_days) AS workday_average, 
    COUNT(*) AS count
FROM work
GROUP BY
    name
HAVING
   workday_average > 2
ORDER BY
    workday_average,
    count DESC;

但这当然假设您使用的是MySQL 8+。如果不是,那么ROW_NUMBER将不可用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56539475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档