2013-01-10 48 views
3

我在具有兩個列主鍵的特定表中遇到GROUP BY查詢問題。MySQL Group通過多個主鍵表進行查詢

我的表看起來像這樣的:

CREATE TABLE IF NOT EXISTS `stocks` (
     `id_city` int(10) NOT NULL, 
     `id_prod` int(10) NOT NULL, 
     `sell_price` int(10) DEFAULT '0', 
     PRIMARY KEY (`id_city`,`id_prod`) 
    ) 

比方說,它已插入這樣的價值觀:

INSERT INTO `stocks` (`id_city`, `id_prod`, `sell_price`) 
VALUES ('1', '1', '100'), ('2', '1', '90'), ('3', '1', '10'); 

這樣的查詢後:

SELECT id_prod, id_city, MIN(sell_price) 
      FROM stocks 
      GROUP BY id_prod 

結果行失去「id_city '鍵 - 它首次出現city_id,

id_prod  id_city  MIN(sell_price) 
1   1   10 

如何爲這種情況建立一個合適的查詢?結果應該是這樣的:

id_prod  id_city  MIN(sell_price) 
1   3   10 
+0

什麼代表數3試試這個?最後的id或計數如果id_city? –

回答

2

如果你想返回持有min(sell_price)您可以使用記錄子查詢:

SELECT s1.id_prod, 
    s1.id_city, 
    s1.sell_price 
FROM stocks s1 
inner join 
(
    select id_prod, MIN(sell_price) sell_price 
    from stocks 
    group by id_prod 
) s2 
    on s1.id_prod = s2.id_prod 
    and s1.sell_price = s2.sell_price 

SQL Fiddle with Demo

這將返回:

| ID_PROD | ID_CITY | SELL_PRICE | 
---------------------------------- 
|  1 |  3 |   10 | 
+0

太棒了!這只是解決方法,或者只是我的查詢不能用'group by'來完成? –

+0

不適合你的情況。如果你僅僅使用'GROUP BY'' ID_PROD',那麼就不能保證返回什麼'id_city'。你不能'GROUP BY id_city',因爲你會返回所有3條記錄,因爲它們是不同的值。 – Taryn

+0

謝謝你!完美的作品。 –

0

,你將不得不增加id_cityGROUP BY條款以及

http://www.w3schools.com/sql/sql_groupby.asp

+0

這將返回由id_city分隔的所有記錄。我想用適當的id_city產品以最低的價格創建一個記錄。 –

+0

在這種情況下,請參閱@bluefeet答案。這是我認爲的現貨 – Tikkes

+0

是的,它可以完成這項工作。太糟糕了,在這裏不工作... –

1

你的意思是像在使用max(id_city)

SELECT id_prod, max(id_city) city , MIN(sell_price) 
     FROM stocks 
     GROUP BY id_prod 

sql demo

或類似的使用count(id_city)

 SELECT id_prod, count(id_city) city, MIN(sell_price) 
     FROM stocks 
     GROUP BY id_prod 

sql demo

兩個回報

ID_PROD CITY MIN(SELL_PRICE) 
     1  3    10 

編輯

通過INNER JOIN

SELECT s.id_prod, 
      s.id_city, 
      s.sell_price 
    FROM stocks s 
    inner join 
      (
       select id_prod, MIN(sell_price) sell_price 
       from stocks 
       group by id_prod 
      ) s1 
    on s.id_prod = s1.id_prod 
    and s.sell_price = s1.sell_price 

DEMO SQLFIDDLE

+0

不可以。我想返回'id_city',其中某些產品的'sell_price'最低。 –

+0

看看我編輯的答案。 –

+0

現在它工作正常。看起來幾乎和@bluefeet一樣;)。謝謝你的答案! –