MySql использует правильный синтаксис для предложения over

Каков правильный синтаксис, чтобы предложение over работало в mysql?

Я хотел бы видеть общее количество смс, отправленных каждым пользователем, без группировки с предложением group by.

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

person Nightwolf    schedule 09.06.2011    source источник
comment
какой результат вы хотите получить с помощью этого запроса?   -  person Awais Qarni    schedule 09.06.2011
comment
Я хотел бы видеть общее количество смс, отправленных каждым пользователем, без группировки с предложением group by.   -  person Nightwolf    schedule 09.06.2011


Ответы (4)


Насколько я знаю, в MySQL нет предложения OVER, но вот ссылка, которая может помочь вам добиться тех же результатов:

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

Надеюсь это поможет.

person Chris Halgryn    schedule 09.06.2011
comment
Это больше не верно для MySQL 8: dev.mysql.com /doc/refman/8.0/en/window-functions.html - person Lukas Eder; 18.09.2018

В MySQL 8 есть функции окна! Поэтому вы можете написать свой запрос в нем так:

SELECT username, 
       count(sentSmsId) OVER (partition by userId) 
FROM sentSmsTable
JOIN userTable ON userId = sentUserId;     
person Radim Bača    schedule 09.11.2017

В настоящее время MySQL не поддерживает оконные функции, поэтому over() приведет только к синтаксическим ошибкам (или мусору, если он будет принят независимо).

person Denis de Bernardy    schedule 09.06.2011

MySQL не имеет оконных функций до самой последней версии: MySQL 8 (выпуск в апреле 2018 г.). MS SQL Server также принимает предложение OVER.

Синтаксис:

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

Ознакомьтесь с https://mysqlserverteam.com/mysql-8-0-2-introduction-window-functions/ для получения дополнительных примеров.

person gogolaygo    schedule 30.05.2018