2012-04-02 127 views
2

我有一個名爲Products(模式名稱,城市,州,zip_code價格)的表。MySQL在每個郵政編碼中找到最貴的郵政編碼

而且我想爲給定州的每個zip_code找到最昂貴的產品名稱。

我寫

SELECT zip_code, MAX(price) 
FROM products 
WHERE products.state = 'NJ' 
GROUP BY zip_code 

一個子查詢,但我無法弄清楚「NJ」

我將不勝感激,如果你能幫助我,謝謝 每ZIP_CODE顯示的產品名稱和價格。

+0

[爲表中的每個組選擇前N行]的可能重複(http://stackoverflow.com/questions/3998529/selecting-top-n-rows-for-each-group-in-a-table ) – 2012-04-02 18:50:37

+0

'SELECT name,zip_code,MAX(price)'...沒有工作? – hjpotter92 2012-04-02 18:54:04

+2

@TheJumpingFrog:不會返回與MAX(價格)相關的記錄,它只是返回每個組的任意記錄。 – mellamokb 2012-04-02 18:55:18

回答

2
SELECT 
     t.name, t.city, t.zip_code, t.price 
FROM 
     (SELECT zip_code 
       , MAX(price) as price 
     FROM products 
     WHERE state = 'NJ' 
     GROUP BY zip_code 
     ) AS tm 
    JOIN 
     products as t 
      ON tm.zip_code = t.zip_code 
      AND tm.price = t.price 
WHERE 
     t.state = 'NJ' 
+1

@safarov:你爲什麼刪除你的答案? – 2012-04-02 19:24:52

+0

我知道對,@薩法羅夫有最好的回答:) – mellamokb 2012-04-02 20:01:36

0

事情是這樣的:

SELECT name,price,zip_code 
FROM products 
WHERE state='NJ' AND price=(SELECT MAX(price) FROM products) 
+0

但它必須爲每個郵政編碼 – CanCeylan 2012-04-02 18:57:59

+1

我認爲這也無濟於事。它只會轉發最高價格實體的名稱 – hjpotter92 2012-04-02 18:58:21

3

這應該工作,雖然我不能保證它的效率。根據評論,這裏有一個更新,將價格等於每個郵政編碼的最高價格的所有記錄拉回。

SELECT * 
    FROM products p1 
WHERE p1.state = 'NJ' 
    AND p1.price = (select max(price) from products p2 
        where p1.zip_code = p2.zip_code) 

http://www.sqlfiddle.com/#!2/98f6d/2

+0

是的,我認爲它會工作,但唯一的問題是,我想找到價格最高的所有產品,而不僅僅是最頂級的產品 – CanCeylan 2012-04-02 19:02:44

+0

右側,更新以匹配價格只是第一個記錄。雖然我想@ safarov的解決方案更好。 – mellamokb 2012-04-02 19:07:07

0

我認爲你會(無論哪種方式)需要在 products.state,products.zip_code一個綜合指數。

嘗試以下操作:

SELECT p.zip_code, MAX(p.price) AS max_price, 
(
    SELECT GROUP_CONCAT(CAST(products.id AS CHAR)) FROM products 
    WHERE products.state = 'NJ' AND 
    products.zip_code = p.zip_code AND products.price = MAX(p.price) 
) AS product_ids 
FROM products p WHERE p.state = 'NJ' GROUP BY p.zip_code ORDER BY NULL 

注:
GROUP_CONCAT有關於結果字符串的最大長度的限制,請參見http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html#sysvar_group_concat_max_len。如果你缺少一些ID,這可能是原因。