[操作疑難] 請問 這句SQL點寫

我想攞各類別產品(eg 日常用品,電腦產品)中最貴果20樣 (eg 牙刷,硬碟), 句sql應該要點寫,新手,請各位師兄指點,感激,我係用Access。

SELECT TOP 20 * FROM (table)
ORDER BY (price);

TOP

我係想擺各類別的 top 20, 好似日常用品的top 20, 電腦產品的 top 20, 咁應該要點寫呢?

TOP

我係想擺各類別的 top 20, 好似日常用品的top 20, 電腦產品的 top 20, 咁應該要點寫呢? ...
星河明空 發表於 2016-12-5 17:30
你「各類別」係同一個table,定係每個類別一個table
冇schema好難幫你

TOP

我想攞各類別產品(eg 日常用品,電腦產品)中最貴果20樣 (eg 牙刷,硬碟), 句sql應該要點寫,新手,請各位師 ...
星河明空 發表於 2016-12-5 16:49


    整題功課貼出來

TOP

回復 4 #yjfoeg

係同一個table, 個table得3個fields
Category
Product Name
Price
Thanks各位師兄!

TOP

我自己寫左條,但有d情況個result會唔啱,好似當排名21 的產品價錢同排名20或之前的產品價錢一樣時,會show唔到出來。

Qrytesting係個table個名
入邊有3個fields: ProductCategory, ProductName, Price

SELECT *
FROM 
        (SELECT a1.ProductCategory, a1.ProductName, a1.Price, Count(*) AS ProductRank 
        FROM qryTesting AS a1 INNER JOIN qryTesting AS a2 ON (a1.Price <= a2.Price) AND (a1.ProductCategory = a2.ProductCategory) 
        GROUP BY a1.ProductCategory, a1.ProductName, a1.Price)  AS RankingQuery
WHERE (((RankingQuery.ProductRank)<=20))
ORDER BY RankingQuery.ProductCategory, RankingQuery.ProductRank;

TOP

我自己寫左條,但有d情況個result會唔啱,好似當排名21 的產品價錢同排名20或之前的產品價錢一樣時,會show ...
星河明空 發表於 2016-12-6 14:05



1.    JOIN 最好唔好用 <>
用 = 最易明, 唔係好易 join 錯

2.  COUNT(*) 係呢度係 non-deterministic... 好大機會錯

TOP

我諗我嘅大方向係用group by /partition/ row_number < 20 /top 20/ UNION
詳細等我返歸再諗

TOP

本帖最後由 masseffect 於 2016-12-6 22:07 編輯

用window function,rank over partition order by price
然後再用個result query多次where 返個rank <=20

如果你要嘅唔係rank,只係順次序頭20條,就用row_number取代rank
俾晒keyword你,真係點寫自己搵下,一路搵你一路學多啲嘢
搵到唔明再問

TOP

相關文章