mysql 如何从具有“分组依据”和“排序依据”的表中获取特定行

46scxncf  于 2023-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(120)

我有一个表格,像下面这样:
| tmp_id| product_availability(0和1)|is_available(0和1)|stock_count(integer)|product_id(integer)|
| - -----|- -----|- -----|- -----|- -----|
| 1| 1| 1| 0| 1|
| 2| 1| 1| 4| 1|
我需要得到每个product_id的第一个可用产品。可用产品必须首先检查product_availability,然后检查is_available,最后检查stock_count。(当product_availability1时,产品可用,然后is_available1,并且至少有一个产品1
我想先显示可用的产品,如果没有可用的产品,则显示哪个产品无关紧要(在不可用的情况下,第一个产品也可以)。

  • (在上面的例子中,我需要先得到2tmp_id的产品。)*
    问题:我的问题是如何编写MYSQL查询来实现我的需求?

我可以用下面的命令得到我想要的产品,但我不知道下一步该怎么做才能用GROUP BY得到第一个现有的产品:

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

**注意:**当然,这只是我所拥有的简单演示,实际代码更复杂,有多个连接和其他东西。

tvmytwxo

tvmytwxo1#

这可以通过使用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;

相关问题