鉴于此表: 产品(id,价格)
如何编写SQL查询以返回所有具有第N个最高价格的产品(可以使用该过程多于一个)
由于
答案 0 :(得分:2)
这是我可以做到的最通用的,但它仍然使用TOP,其中一些RDBMS使用LIMIT,因此您可能需要进行轻微的修改。
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
)
允许row_number的其他方言可能会比我的嵌套子查询做出更好的选择。
编辑:键入MAX,表示MIN
编辑:有人建议我使用窗口函数给出一个例子......
SELECT
*
FROM
(
SELECT
RANK() OVER (ORDER BY price) AS ranked_position,
*
FROM
Products
)
AS ranked_products
WHERE
ranked_position = 9
或者使用DENSE_RANK,具体取决于您想要的行为。
注意:检查您的RDBMS是否使用了窗口函数。并非所有人都是平等的。
答案 1 :(得分:1)
我不确定你使用的是哪个sql平台,但是我会说第n行(实现这个因sql平台而异)来自
SELECT DISTINCT price FROM myDB.myTable ORDER BY price DESC;
根据价格使用此结果加入您的初始表。
答案 2 :(得分:0)
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
抱歉,你必须滚动。我习惯了格式化。