我有一个名为Products的表,其中包含架构(名称,城市,州,zip_code价格)。
我想找到给定州的每个zip_code最贵的产品名称。
我写了
SELECT zip_code, MAX(price)
FROM products
WHERE products.state = 'NJ'
GROUP BY zip_code
作为子查询,但我无法确定在'NJ'中显示每个zip_code的产品名称和价格
如果你能帮助我,我将不胜感激 感谢。
答案 0 :(得分: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)
答案 1 :(得分: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'
答案 2 :(得分:0)
这样的事情:
SELECT name,price,zip_code
FROM products
WHERE state='NJ' AND price=(SELECT MAX(price) FROM products)
答案 3 :(得分: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,可能就是原因。