Имеет ли mysql эквивалент "аналитических функций" Oracle?

Я ищу аналитическую функцию типа PARTITION BY в MySQL (см. docs для получения дополнительной информации)

Аналитические функции вычисляют совокупное значение, основанное на группе строк. Они отличаются от совокупных функций тем, что они возвращаются несколько строк для каждой группы.

Он существует?

Ответ 1

НЕТ, это один из основных недостатков MySQL, по сравнению с другими СУБД, такими как MSSQL, Oracle, PostgreSQL. Я сильно сомневаюсь, что в будущем буду работать над функциями Window в MySQL, особенно после приобретения Oracle MySQL...

Ответ 2

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


SELECT amount, 
    @sum := @sum + amount as sum 
FROM tbl
JOIN (SELECT @sum := 0) s

Если вы хотите PARTITION BY, это возможно, но немного сложнее. В принципе, вы добавляете еще один @variable, чтобы наблюдать за учетной записью (или тем, что вы хотите разделить), упорядочивать по учетной записи (или вашей переменной), а затем reset @sum при изменении учетной записи. Как показано ниже:


SELECT account, 
    amount, 
    (case when @account != account then @sum := amount else @sum := @sum + amount end) as sum,
    (case when @account != account then @account := account else @account end) as _
FROM (SELECT * FROM tbl ORDER BY account)
JOIN (SELECT @sum := 0) s
JOIN (SELECT @account := '') a

Вы заметите два основных изменения, которые должны были быть выполнены для достижения эффекта раздела:

  • Основная таблица (tbl) заключена в подсечку с предложением ORDER BY. Это необходимо, потому что, когда MySQL переходит к тестированию переменной @account, значения должны быть уже заказаны. Если этого не произошло, вы получите неправильные значения суммы, а также значения учетной записи.

  • Есть дополнительный столбец с псевдонимом as _. Вы можете игнорировать этот столбец при использовании результатов, но порядок проверки и изменения @account должен быть после проверки и изменения @sum.

    Кроме того, вы можете изменить порядок столбцов, если не считаете последнее. Это делается, выбирая первый столбец account, поскольку он дублирует его с последним столбцом _, а затем явно переименовывает псевдоним _ в account.

Ресурсы

Ответ 3

Хотя MySQL не поддерживает аналитические функции, MariaDB. Это замена для MySQL и создается оригинальными разработчиками MySQL.

Ответ 4

Существует коммерческий продукт для SQL Server, который предоставляет аналитические функции в базе данных и может быть подключен к базе данных oracle или MySQL через "связанные серверы" /odbc - вот статья, описывающая это: http://westclintech.com/Blog/tabid/132/EntryId/88/Using-XLeratorDB-with-MySQL-and-other-RDBMS-s.aspx

Для этого требуется наличие Windows o/s и SQL Server 2005 или более поздней версии (что версия Express бесплатна)