如何使用「group by」和「order by」從表中取得特定行
P粉794851975
P粉794851975 2023-09-12 17:54:20
0
1
508

我有一個如下表:

tmp_id 產品可用性(0 和 1) is_available(0 和 1) stock_count(整數) product_id(整數)
1 1 1 0 1
2 1 1 4 1

我需要為每個 product_id 取得第一個可用產品。 可用產品必須先檢查product_availability,然後檢查is_available,最後檢查stock_count。 (當product_availability1 時,產品可用,然後is_available1 且庫存中至少有一種產品1。)

我想先展示可用的產品,如果沒有可用的產品,則顯示哪個產品並不重要(在不可用的情況下,第一個產品也可以)。

(在上面的範例中,我需要先取得 tmp_id2 的產品。)

問題: 我的問題是如何寫 MYSQL 查詢來實現我的需求?

我可以使用以下命令以所需順序取得我的產品,但我不知道下一步該怎麼做才能使用 GROUP BY 取得第一個現有產品:

SELECT
    pa.*
FROM
    `product_advanced` AS `pa`
ORDER BY
    `pa`.`product_availability` DESC,
    `pa`.`is_available` DESC,
    `pa`.`stock_count` DESC
    

注意:當然,這只是我所擁有的內容的簡單演示,實際程式碼更為複雜,並且具有多個聯接和其他內容。

P粉794851975
P粉794851975

全部回覆(1)
P粉055726146

這可以使用 row_number() 來完成,傳回分割區內每行的唯一行號

WITH cte AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY product_id ORDER BY product_availability DESC, is_available DESC, stock_count DESC) AS rn
  FROM product_advanced
)
SELECT tmp_id, product_availability, is_available, stock_count, product_id  
FROM cte 
WHERE rn = 1;
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板