首頁  >  問答  >  主體

如何使用「group by」和「order by」從表中取得特定行

我有一個如下表:

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粉794851975P粉794851975381 天前385

全部回覆(1)我來回復

  • P粉055726146

    P粉0557261462023-09-13 14:05:48

    這可以使用 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;

    回覆
    0
  • 取消回覆