Отсутствует закрывающая скобка с использованием DENSE_RANK () MySQL - PullRequest
0 голосов
/ 10 июня 2018

Я не уверен, где мой синтаксис здесь неправильный.Мне нужно отобразить топ-поставщиков на основе invoice_total

select *
from (
        select vendor_id, invoice_total,
        dense_rank () over(partition by vendor_id order by invoice_total asc)
          as ranking
        from invoices) a1

Ответы [ 2 ]

0 голосов
/ 10 июня 2018

MySQL поддерживает только dense_rank() в версии 8+.Вы всегда можете использовать коррелированный подзапрос:

select i.*
from invoices i
where i.invoice_total = (select max(i2.invoice_total)
                         from invoices i2
                         where i2.vendor_id = i.vendor_id
                        );

Предполагается, что «ведущие поставщики» ссылаются на наибольшие итоги, что противоположно вашему SQL.

Есть и другие способы выразить это.Мне также нравится использовать кортежи в MySQL:

select i.*
from invoices i
where (i.vendor_id, i.invoice_total) in
          (select i2.vendor_id, max(i2.invoice_total)
           from invoices i2
           group by i2.vendor_id
          );
0 голосов
/ 10 июня 2018

Добавить where a1.ranking = 1 для внешней части SQL:

select *
from (
        select vendor_id, invoice_total,
        dense_rank () over(partition by vendor_id order by invoice_total asc)
          as ranking
        from invoices) a1
where a1.ranking = 1;
...