显示最低价格,但也按日期和sku [重复]分组

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

这个问题在这里已有答案:

我试图通过SKU和日期从MySql数据库和组中找到所选产品的最低价格,并将它们输出到PHP。

我已经找到了其他的答案,但据我所知只能分组1,因为我首先需要将所有产品分组到特定日期,然后按sku分组并显示每个sku的最低价格

我在数据库中有1个表,其中包含

ID  | sku | company     | total_price | date
-------------------------------------------------
1   |tku1 | company_1   | 298.99      |2019/04/09
2   |tku1 | company_2   | 299.99      |2019/04/09
3   |tku1 | company_3   | 290.00      |2019/04/09
4   |stp1 | company_1   | 199.00      |2019/04/09
5   |stp1 | company_2   | 158.99      |2019/04/09
6   |stp1 | company_3   | 150.99      |2019/04/09
7   |upk1 | company_1   | 349.99      |2019/04/09
8   |upk1 | company_2   | 348.99      |2019/04/09
9   |upk1 | company_3   | 346.00      |2019/04/09
10  |dhu1 | company_1   | 520.99      |2019/04/09
11  |dhu1 | company_2   | 518.00      |2019/04/09
12  |dhu1 | company_2   | 515.99      |2019/04/09    
13  |tku1 | company_1   | 298.99      |2019/04/08
14  |tku1 | company_2   | 299.99      |2019/04/08
15  |tku1 | company_3   | 290.00      |2019/04/08
16  |stp1 | company_1   | 199.00      |2019/04/08
17  |stp1 | company_2   | 158.99      |2019/04/08
18  |stp1 | company_3   | 150.99      |2019/04/08
19  |upk1 | company_1   | 349.99      |2019/04/08
20  |upk1 | company_2   | 348.99      |2019/04/08
21  |upk1 | company_3   | 346.00      |2019/04/08
22  |dhu1 | company_1   | 520.99      |2019/04/08
23  |dhu1 | company_2   | 518.00      |2019/04/08
24  |dhu1 | company_2   | 515.99      |2019/04/08

这是我到目前为止: -

$sql= ("SELECT * 
        FROM products 
        WHERE total_price = (
                SELECT MIN(total_price) 
                from products 
                GROUP BY sku 
                ORDER BY date");
$result = $conn->query($sql);
while($row = $result->fetch_assoc()) {
echo "<tr>";
echo "<td>" . $row['sku'] . "</td>";
echo "<td>" . $row['total_price'] . "</td>";
echo "<td>" . $row['company'] . "</td>";
echo "<td>" . $row['date'] . "</td>";
echo "</tr>";
}

但这不起作用我的目标是在PHP中显示这样的东西

ID  | SKU | COMPANY     | TOTAL_PRICE | DATE
-------------------------------------------------
3   |tku1 | company_3   | 290.00      |2019/04/09
6   |stp1 | company_3   | 150.99      |2019/04/09
9   |upk1 | company_3   | 346.00      |2019/04/09
12  |dhu1 | company_2   | 515.99      |2019/04/09
mysql greatest-n-per-group
1个回答
1
投票

编写此查询的最有效方法是使用JOIN到每个total_price的最小sku值表:

SELECT p.* 
FROM products p
JOIN (SELECT sku, MIN(total_price) AS total_price
      FROM products 
      GROUP BY sku) mp ON mp.sku = p.sku AND mp.total_price = p.total_price
ORDER BY date

输出:

ID  sku     company     total_price date
3   tku1    company_3   290         2019-04-09
6   stp1    company_3   150.99      2019-04-09
9   upk1    company_3   346         2019-04-09
12  dhu1    company_2   515.99      2019-04-09

Demo on dbfiddle

© www.soinside.com 2019 - 2024. All rights reserved.