Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用row_number()将行号添加到MySQL显示中_Mysql_Sql - Fatal编程技术网

如何使用row_number()将行号添加到MySQL显示中

如何使用row_number()将行号添加到MySQL显示中,mysql,sql,Mysql,Sql,如何使用ROW_NUMBER函数在Mysql表显示器上显示行号 mysql> select * from work; +------+-----------+ | name | work_days | +------+-----------+ | john | 5 | | jane | 7 | | jane | 2 | | john | 3 | +------+-----------+ 4 rows in set (0.01

如何使用ROW_NUMBER函数在Mysql表显示器上显示行号

mysql> select * from work;
+------+-----------+
| name | work_days |
+------+-----------+
| john |         5 |
| jane |         7 |
| jane |         2 |
| john |         3 |
+------+-----------+
4 rows in set (0.01 sec)
不使用行号:

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\ U number添加行号列时出现以下错误

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> 

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

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+。如果没有,那么行号将不可用。

请提及MySQL版本?正如Tim所说,这没有意义,但考虑到足够新的MariaDB:。@user1972031。您在过分区上遇到语法错误。这意味着您的数据库不支持窗口函数,因此您无法在此数据库上执行所需的操作。您可以将数据库升级到最新版本。Mysql版本为8.0.15 linux:Mysql$Mysql-V Mysql Ver 8.0.15,适用于x86_64 HomebrewAs上的osx10.14。错误提到MariaDB时,MariaDB需要至少为10.2+。Mysql版本为8.0.15。linux:MYSQL$MYSQL-VMySQL版本8.0.15,用于x86_64自制上的osx10.14。我觉得8.0.15应该可以有行数功能?是的,看起来你在运行MySQL 8+。@Amadan:是的,谢谢你的帮助。在我将Mysql升级到版本15.1和MariaDB升级到版本10.3.15mysql之后,它现在工作得很好。V报告了Mysql客户端的版本。问题是服务器是10.2版本之前的版本。