16

What is the correct syntax to get the over clause to work in mysql?

I would like to see the total sms's sent by each user without grouping it with the group by clause.

SELECT 
    username, 
    count(sentSmsId) OVER (userId) 
FROM 
    sentSmsTable,
    userTable
WHERE
    userId = sentUserId;
Lukas Eder
  • 211,314
  • 129
  • 689
  • 1,509
Nightwolf
  • 945
  • 2
  • 9
  • 23

4 Answers4

20

MySQL 8 has got the window functions! Therefore, you can write your query in it like this:

SELECT username, 
       count(sentSmsId) OVER (partition by userId) 
FROM sentSmsTable
JOIN userTable ON userId = sentUserId;     
Radim Bača
  • 10,646
  • 1
  • 19
  • 33
13

There is no OVER clause in MySQL that I know of, but here is a link that might assist you to accomplish the same results:

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

Hope this helps.

5

MySQL does not currently support window functions, so over() will only yield syntax errors (or garbage, if it's accepted regardless).

Denis de Bernardy
  • 75,850
  • 13
  • 131
  • 154
3

MySQL Doesn't have window functions until the most recent release: MySQL 8 (release in April, 2018). MS SQL Server also accepts OVER clause.

The syntax is:

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

Check out https://mysqlserverteam.com/mysql-8-0-2-introducing-window-functions/ for more examples.

gogolaygo
  • 199
  • 1
  • 12