【问题标题】:MySql using correct syntax for the over clauseMySql 对 over 子句使用正确的语法
【发布时间】:2023-03-14 07:15:02
【问题描述】:

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

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

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

【问题讨论】:

  • 你希望通过这个查询得到什么样的结果?
  • 我想查看每个用户发送的短信总数,而不用 group by 子句分组。

标签: mysql sql window-functions


【解决方案1】:

MySQL 8 获得了window functions!因此,您可以像这样在其中编写查询:

SELECT username, 
       count(sentSmsId) OVER (partition by userId) 
FROM sentSmsTable
JOIN userTable ON userId = sentUserId;     

【讨论】:

    【解决方案2】:

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

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

    希望这会有所帮助。

    【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      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/ 了解更多示例。

      【讨论】:

        猜你喜欢
        • 2016-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-18
        • 1970-01-01
        • 2019-08-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多