我有一個(更改的專案/資料)雜貨店故事過道和產品的資料庫,我試圖在每個過道中找到庫存中最昂貴的 3 件商品。
我的大查詢代碼是這樣的:
SELECT ROW_NUMBER() OVER (PARTITION BY aisle ORDER BY price DESC) AS high_prices, aisle,
price, product FROM `a_database.shopping.grocery_stores`
WHERE in_stock = TRUE AND high_prices <= 3
GROUP BY aisle
ORDER BY price;
我收到以下錯誤:但是,unrecognized name: high_prices at [2:30]由于high_prices <= 3,我不知道另一種方法。
如前所述,我預計商店中的 4 件最昂貴的商品都有庫存。但由于上述錯誤,它不起作用。當我洗掉 時high_prices <= 3,我得到的是商店中所有物品的串列以及它們的過道完全亂序。
預期的輸出類似于此螢屏截圖:

我已經包含了一個示例資料表:
aisle product in_stock price
1 fresh_chicken TRUE 10
2 frozen_fish TRUE 10
3 truffles TRUE 15
2 cereal TRUE 5
2 cake TRUE 25
3 wine TRUE 30
1 fresh_fish TRUE 15
1 fresh_beef TRUE 10
2 seasonings FALSE 15
3 whiskey TRUE 25
1 whiskey TRUE 40
1 pre_cooked TRUE 30
2 fresh_pie FALSE 10
3 fresh_salad FALSE 5
對此的任何幫助或建議將不勝感激。
uj5u.com熱心網友回復:
下面使用
select *
from your_table
where in_stock
qualify 3 >= row_number() over(partition by aisle order by price desc)
如果應用于您問題中的樣本資料 - 輸出是

uj5u.com熱心網友回復:
如果要參考別名,請使用 HAVING
SELECT * FROM
(SELECT ROW_NUMBER() OVER (PARTITION BY aisle ORDER BY price DESC) AS high_prices, aisle,
price, product
FROM `a_database.shopping.grocery_stores`
WHERE in_stock = TRUE
GROUP BY aisle ) t1
WHERE high_prices <= 3
ORDER BY price;
uj5u.com熱心網友回復:
使用子查詢:
select *
from (select row_number() over (partition by aisle order by price desc) row_number,
aisle,
price,
product
from a_database.shopping.grocery_stores
where in_stock is true) a
where row_number <= 3
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/468906.html
上一篇:SQLServer:具有多列的GROUPBY會產生重復的結果
下一篇:如何根據查詢結果從表中洗掉
