Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.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
MySQL中的行项目计数_Mysql_Sql_Database_Count_Window Functions - Fatal编程技术网

MySQL中的行项目计数

MySQL中的行项目计数,mysql,sql,database,count,window-functions,Mysql,Sql,Database,Count,Window Functions,我有一个连接到多个表的复杂查询来显示事务历史记录,我想要一种快速简便的方法来计算订单id的出现次数,使其成为行号。我已经用代码完成了,但出于性能原因,我想用MySQL完成。以下是我的一个例子: order_id item_id --------- -------- 1111111 444444 1111111 555555 1111111 666666 1111112 123333 1111112 121111

我有一个连接到多个表的复杂查询来显示事务历史记录,我想要一种快速简便的方法来计算订单id的出现次数,使其成为行号。我已经用代码完成了,但出于性能原因,我想用MySQL完成。以下是我的一个例子:

order_id    item_id  
---------   --------
1111111     444444   
1111111     555555   
1111111     666666   
1111112     123333   
1111112     121111   
1111113     123123   
1111114     123123   
1111115     123123   
这就是我希望它看起来的样子:

order_id    line_number    item_id      
---------  ------------    ---------    
1111111          1         444444   
1111111          2         555555   
1111111          3         666666   
1111112          1         123333   
1111112          2         121111   
1111113          1         123123   
1111114          1         123123   
1111115          1         123123   
我尝试了COUNTorder\u id,但没有效果,除非有好方法。谢谢

MySQL版本5.5.43

在MySQL 8.0中,只需使用行号:

在早期版本中,除了使用变量之外,还有一种解决方案是使用子查询进行内联计数:


select
    order_id,
    (
        select 1 + count(*) 
        from mytable t1 
        where t1.order_id = t.order_id and t1.item_id < t.item_id
    ) line_number,
    item_id
from mytable t
order by order_id, item_id
在MySQL 8.0中,只需使用行号:

在早期版本中,除了使用变量之外,还有一种解决方案是使用子查询进行内联计数:


select
    order_id,
    (
        select 1 + count(*) 
        from mytable t1 
        where t1.order_id = t.order_id and t1.item_id < t.item_id
    ) line_number,
    item_id
from mytable t
order by order_id, item_id

你在运行哪个版本的MySQL?@GMB MySQL版本5.5.43你在运行哪个版本的MySQL?@GMB MySQL版本5.5.43你是最好的。非常感谢。你是最棒的。非常感谢。