如何从最小值获取关联的行数据

时间:2019-01-23 13:27:52

标签: php mysql

我试图从分组的列(sku)中获取最低价格(总价),然后获取与所得最低价格相关的相应供应商数据(供应商)。

表格示例

sku     supplier    totalprice
505     Sup1        20
505     Sup2        30
505     Sup3        25
605     Sup1        100
605     Sup2        97
605     Sup3        111

我正在尝试将sku列分组,以获取最低的价格和相关的供应商,

$query  = "SELECT sku, supplier,  MIN(totalprice) FROM pricetable GROUP BY sku";
$result = mysqli_query($conn, $query);
while($row = mysqli_fetch_array($result)) {
    echo "The cheapest  ". $row['sku']. " is £" .$row['MIN(totalprice)']." from ".$row['supplier'];

例如,

505组的供应商Sup1的价格最低,为20

组606从供应商Sup2处的最低价格为97

上面的代码为我提供了每个sku组的最低价格,但我无法获得相关的供应商名称。

3 个答案:

答案 0 :(得分:2)

您可以在下面尝试-使用相关子查询

SELECT sku, supplier, totalprice FROM pricetable t1
where totalprice in 
    (select MIN(totalprice) from pricetable t2 where t1.sku=t2.sku GROUP BY t2.sku)

答案 1 :(得分:0)

在MySQL 8.x中,您可以执行以下操作:

select *
from pricetable
where rank() over(partition by sku order by totalprice) = 1

答案 2 :(得分:0)

执行此操作的另一种常见方法是使用sku和每个sku的最小总价创建一个派生表,然后重新加入基本数据集。

SELECT PT.sku, PT.supplier,  PT.totalprice
FROM pricetable PT
INNER JOIN (SELECT min(totalprice) MTP, SKU 
            FROM pricetable 
            GROUP BY sku) B
 on PT.SKU = B.SKU
and PT.MTP = PT.totalprice