16

让 over 子句在 mysql 中工作的正确语法是什么?

我想查看每个用户发送的短信总数,而不用 group by 子句分组。

SELECT 
    username, 
    count(sentSmsId) OVER (userId) 
FROM 
    sentSmsTable,
    userTable
WHERE
    userId = sentUserId;
4

4 回答 4

19

MySQL 8 有窗口函数!因此,您可以像这样在其中编写查询:

SELECT username, 
       count(sentSmsId) OVER (partition by userId) 
FROM sentSmsTable
JOIN userTable ON userId = sentUserId;     
于 2017-11-09T10:37:21.967 回答
13

据我所知,MySQL 中没有 OVER 子句,但这里有一个链接可以帮助您完成相同的结果:

http://explainextended.com/2009/03/10/analytic-functions-first_value-last_value-lead-lag/

希望这可以帮助。

于 2011-06-09T12:21:53.440 回答
5

MySQL 目前不支持窗口函数,因此over()只会产生语法错误(或垃圾,如果它被接受的话)。

于 2011-06-09T12:21:32.783 回答
3

MySQL 在最新版本之前没有窗口函数:MySQL 8(2018 年 4 月发布)。MS SQL Server 也接受 OVER 子句。

语法是:

function(col1) OVER (PARTITION BY col2 ORDER BY col3)

查看https://mysqlserverteam.com/mysql-8-0-2-introducing-window-functions/了解更多示例。

于 2018-05-30T16:18:27.713 回答