Mysql 按 MIN(价格) 分组

问题描述 投票:0回答:1

所以我有一张桌子,里面装满了租赁物品的预先计算的价格。这是它的简单版本:

我想要的是获得每个物品的最低日价格,所以我这样做了:

SELECT *, ROUND(MIN(price)/duration, 0) xprice FROM `my_cache` WHERE `price` > 0  GROUP BY ROUND(price/duration, 0) ORDER BY `xprice` ASC

但是这样我仍然会得到冗余并且不会分组

xprice
值。

sql mysql mariadb
1个回答
0
投票

这里有一些关于这可能是什么的提示。没有预期的结果,OP 代码中存在一些问题。目前尚不清楚“每件物品的最低日价格”是多少。提供的示例数据的一些可能性可能是:

  1. 每个持续时间的最低价格(基于OP的代码)
SELECT x.OID, Min(x.XPRICE) "XPRICE"
FROM  ( Select   t.OID, t.DURATION,
                 ROUND(MIN(t.price)/t.duration, 0) "XPRICE" 
        From     tbl t 
        Where    t.price > 0 
        Group By t.OID, t.DURATION
     ) x
GROUP BY x.OID
HAVING   Min(x.XPRICE) = XPRICE
/*  R e s u l t :
OID    XPRICE
-----  ------
1168      443   */
  1. 一个代码中还有两个选项,用于最低价格和每个持续时间的最低价格,无论价格-持续时间对如何
SELECT x.*
FROM  ( Select   t.OID, t.DURATION, t.PRICE,
                 MIN(t.price) Over(Partition By t.OID) "MIN_XPRICE",
                 ROUND(Min(t.PRICE) Over(Partition By t.OID) / t.DURATION, 0) "MIN_XPRICE_PER_DURATION"
        From     tbl t 
        Where    t.price > 0 
     ) x
ORDER BY x.OID, x.MIN_XPRICE, x.MIN_XPRICE_PER_DURATION
LIMIT 1
/*    R e s u l t :
OID    DURATION   PRICE   MIN_XPRICE   MIN_XPRICE_PER_DURATION
----   --------   -----   ----------   -----------------------
1168          9    3990         3170                       352  */
© www.soinside.com 2019 - 2024. All rights reserved.