2014-08-29 3 views
-1

У меня есть таблица productos:Выделить все записи без дубликатов?

nombre Precio Tienda Departamento 

    A  23  Belén  Hogar 
    B  12  Belén  Hogar 
    C  56  Belén  Hogar 
    C  32  Terra  Hogar 
    D  10  Belén  Hogar 
    E  8  Belén  Hogar 
    E  9  Terra  Hogar 

И мне нужно, чтобы выбрать все записи в таблице productos, однако на продуктах с несколькими записями, которые я хочу один с самой высокой ценой, независимо причем на том же tienda или нет ,

+0

Надеюсь, что перевод подходит ко всему вашему описанию и добро пожаловать в СО. – Prix

+0

В какой базе данных вы используете? – Jens

ответ

0
select p.* 
    from productos p 
    join (select nombre, max(precio) as max_precio 
      from productos 
     group by nombre) v 
    on p.nombre = v.nombre 
    and p.precio = v.max_precio 

Следующая исключит связей в Oracle или SQL Server или PostgreSQL (пожалуйста, укажите базу данных, которую вы используете, если вы не используете Oracle или SQL Server):

select * 
    from (select nombre, 
       precio, 
       tienda, 
       departamento, 
       row_number() over(partition by nombre order by nombre, precio desc, tienda, departamento) as rn 
      from productos) x 
where rn = 1 

скрипку пример при устранении связи: http://sqlfiddle.com/#!6/6b40d/4/0

+0

Брайан, если в таблице есть 1 двойник продукта с той же самой высокой ценой, как я делаю, чтобы выбрать только один. в зависимости от того, что будет – rbklc

+0

Являются ли поля tienda/department разными по этим строкам? Также, какую базу данных вы используете (Oracle, sql server, mysql, postgresql и т. Д.)? –

+0

@rbklc Я добавил способ устранения связей в Oracle, SQL Server или PostgreSQL. Если вы не используете ни одну из этих баз данных, укажите базу данных, которую вы используете. Решение зависит от базы данных. –

Смежные вопросы