sql - 有没有办法在一个 SELECT 语句中执行此操作?使用分组依据

标签 sql sql-server

我有一个表,表 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/

相关文章:

c# - 如何将 SQL Server 过程变量设置为从 C# ASP.NET MVC 程序输入的数据?

sql-server - 每月 T-SQL 累计计数重置

Sql:查找答案是否存在

sql - 过程或函数 “” 需要参数 '',但未提供

sql - 创建动态 SQL 查询时的问题

sql-server - 如何让 ms-access 以不同的用户身份连接到 ms-sql?

sql-server - 无法批量加载。操作系统错误代码 5(访问被拒绝。)

SQL:单个结果行中的组计数

php - 使用 php 以特定顺序从数据库检索并显示数据

mysql - 与两个最大列进行比较得到一行