我有一个表,表 1。在这个表中是名称、城市和价格。名称都是唯一的,城市可以重复使用。我想进行一个查询,为我提供每个城市的最高价格,以及与该行关联的名称。为了获得每个城市的最高价格,我只是这样做:
SELECT MAX(price), city FROM table1 GROUP BY city
但我也想要这个名字。如果我尝试
SELECT MAX(price), city, name FROM table1 GROUP BY city
然后我得到一个查询错误,关于名称如何不包含在分组依据中。如果我将名称添加到组中,则它不会执行我想要的操作。我可以想到如何使用两个查询来做到这一点,但我敢打赌有一种方法可以在一个查询中完成。我错过了什么?
我在 stackoverflow 上发现了一些类似的问题,但它们似乎都在做一些比我试图做的更复杂的事情。我只使用过简单的 SQL 查询,所以我正在自学一些更高级的功能。
最佳答案
WITH RankedPrices AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY city ORDER BY price DESC) AS ix
FROM table1
)
SELECT * FROM RankedPrices WHERE ix=1;
请注意,您没有指定如果一个城市中的两种产品都是最贵的并且价格相同时应该发生什么。此查询返回两者中的任何一个(但只有一个),您也可以以不同方式处理。
关于sql - 有没有办法在一个 SELECT 语句中执行此操作?使用分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10071928/