sql:选择第n个位置(当多行位于第n个位置时)
根据表格: 产品(id、价格) 如何编写sql查询以返回第n个最高价格的所有productus(该过程中可以有多个productus)sql:选择第n个位置(当多行位于第n个位置时),sql,max,Sql,Max,根据表格: 产品(id、价格) 如何编写sql查询以返回第n个最高价格的所有productus(该过程中可以有多个productus) 谢谢我不确定您使用的是哪种sql平台,但我想说的是,从 使用此结果根据价格加入初始表。这是我能做的最通用的,但在某些RDBMS使用限制的情况下,它仍然使用TOP,因此您可能需要稍微修改 SELECT * FROM Products WHERE price = ( SELECT MIN(price)
谢谢我不确定您使用的是哪种sql平台,但我想说的是,从
使用此结果根据价格加入初始表。这是我能做的最通用的,但在某些RDBMS使用限制的情况下,它仍然使用TOP,因此您可能需要稍微修改
SELECT
*
FROM
Products
WHERE
price = (
SELECT
MIN(price)
FROM
(
SELECT TOP 9 price FROM Products GROUP BY price ORDER BY price DESC
)
AS top_9
)
其他允许行数的方言可能比我的嵌套子查询提供更好的选项
编辑:键入最大值,表示最小值
编辑:有人建议我举一个使用窗口功能的例子
SELECT
*
FROM
(
SELECT
RANK() OVER (ORDER BY price) AS ranked_position,
*
FROM
Products
)
AS ranked_products
WHERE
ranked_position = 9
或者根据您想要的行为,使用密集等级
注意:检查RDBMS是否使用窗口函数。并非所有人生来都是平等的
SELECT * FROM
(SELECT DISTINCT price, ROW_NUMBER() OVER(ORDER BY price DESC) AS priceN FROM myDB.myTable) X
WHERE priceN=3
格式化代码。。。这是新的
如何检查领带…根据评论编辑
SELECT * FROM
(SELECT price,COUNT(price) AS PriceCount, ROW_NUMBER() OVER(ORDER BY price DESC) AS priceN FROM myDB.myTable GROUP BY PRICE HAVING COUNT(price) > 1) X
WHERE priceN=3
抱歉,您必须滚动。我已经习惯了这里的格式设置。请问什么是RDBMS和版本?知道使用哪种SQL方言非常重要……您使用的是什么版本或风格的“SQL”?每个实现都有自己的技巧…@gbn,这就是我们所说的“jinx”?它给出了所有不同价格的列表,但没有给出按顺序识别第9个值的机制。正确。正如我所说的,在不知道这是在哪个SQL平台上运行的情况下,我无法指定查找第n行的方式,因为这一行的实现差异很大。我认为最好使用select“distinct”top 9,否则您将不知道会返回什么。对吗?在本例中使用
DISTINCT
或groupby
将给出相同的结果。但是,根据我的经验,groupby
永远不会比DISTINCT
慢,但有时会更快(取决于RDBMS)。内部查询中的ORDERBY不应该存在。但它肯定应该在所形成的行数函数调用中,这将给出第三高定价的单个项目。然而,OP要求所有价格相同的物品,如果有“平局”。
SELECT * FROM
(SELECT price,COUNT(price) AS PriceCount, ROW_NUMBER() OVER(ORDER BY price DESC) AS priceN FROM myDB.myTable GROUP BY PRICE HAVING COUNT(price) > 1) X
WHERE priceN=3