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
  • 196,412
  • 123
  • 648
  • 1,411
Nightwolf
  • 937
  • 2
  • 9
  • 23

4 Answers4

19

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,526
  • 1
  • 18
  • 32
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
  • 72,128
  • 12
  • 122
  • 148
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
  • 169
  • 1
  • 11