2014-10-14 4 views
-2

У меня есть набор результатов, как показано ниже, где у меня есть тот же продукт, который поступает от разных поставщиков. Я хочу, чтобы определить набор, который не имеет ту же цену, по всем поставщикамНабор результатов фильтра, основанный на конкретном значении столбца в SQL

PRODUCT_ID STORE_ID PRICE 

60    1   10.00 
60    2   10.00 
60    3   10.00 

65    1   9.00 
65    2   8.50 
65    3   9.00 

66    1   21.00 
66    2   21.00 
66    3   21.00 

67    1   16.00 
67    2   15.00 
67    3   19.00 

Я SQL запрос должен возвратить два набора то не имеет одинаковые цены для всех производителей

65    1   9.00 
65    2   8.50 
65    3   9.00 

67    1   16.00 
67    2   15.00 
67    3   19.00 
+1

что вы пробовали? есть ли у вас пример того, что вам удалось сделать? – evilone

+0

Я попытался посмотреть, могу ли я сделать с себя. – Joe

+0

Обновите свой вопрос с помощью запроса, который вы попробовали, и сообщите нам, что случилось не так. –

ответ

0

Вы можете попробовать как показано ниже

select * from product_table 
where product_id in 
(
    select product_id 
    from product_table 
    group by product_id 
    having max(price) = avg(price) 
) 
+0

группа за столом имя? это даже возможно? – evilone

+0

Нет, это определенно не так. Очевидно, это была опечатка. – Rahul

+0

Спасибо Рахул, я возьму его отсюда – Joe

2

ОБНОВЛЕНО: Один из способов сделать это

SELECT * 
    FROM table1 t JOIN 
(
    SELECT product_id 
    FROM table1 
    GROUP BY product_id 
    HAVING COUNT(DISTINCT price) > 1 
) q ON t.product_id = q.product_id 

Выход:

 
+------------+----------+-------+------------+ 
| PRODUCT_ID | STORE_ID | PRICE | product_id | 
+------------+----------+-------+------------+ 
|   65 |  1 | 9.00 |   65 | 
|   65 |  2 | 8.50 |   65 | 
|   65 |  3 | 9.00 |   65 | 
|   67 |  1 | 16.00 |   67 | 
|   67 |  2 | 15.00 |   67 | 
|   67 |  3 | 19.00 |   67 | 
+------------+----------+-------+------------+ 
+0

один вопрос - делает HUNING COUNT (*)> 1 работает тоже в этом случае? – evilone

+1

@evilone 'HAVING COUNT (*)> 1' нет, но' HAVING COUNT (DISTINCT цена)> 1' **. **. В любом случае спасибо за ваш вклад. Хорошая мысль. – peterm

+0

aah, спасибо, я подумал что-то подобное в моей голове, но вы были быстрее с ответом, поэтому я не мог попробовать это :) – evilone

0

Мой запрос выглядит очень похож на peterm запроса «s, но я использовал IN() положение. По-моему, проще читать. Что касается производительности, нет никакой разницы в использовании JOIN или IN() :)

SELECT * 
     FROM PRODUCTS_VENDORS 
    WHERE PRODUCT_ID IN ( SELECT PRODUCT_ID 
           FROM PRODUCTS_VENDORS 
          GROUP BY PRODUCT_ID 
          HAVING COUNT (DISTINCT PRICE) > 1); 
Смежные вопросы