我尝试获取按组排序的产品组列表。
我的问题是,我只需要将一个产品分成一组即可使用(0 =否,1 =是)并且价格最低且金额> 0。

select id, group_id, price, amount, available from products
Table rows:



   id  group_id price amount available
    1  1     100   1      1
    2  1     50    1      1
    3  1     25    1      0
    4  2     100   2      1
    5  2     200   1      1
    6  2     100   2      1
    7  2     50    1      1


我需要ID为2和7的行作为结果。
我的问题是进入group_id时,有多个ID的价格相同。

有没有解决此问题的想法吗?

最佳答案

这是ANSI标准,应返回您想要的内容。如果有多个符合条件的行(即具有相同的最小价格),它将仅返回第一个(较低的ID)。

SELECT MIN(P.id),  P.group_id, P.price, P.amount, P.available
FROM products P
INNER JOIN
    (SELECT group_id, MIN(price) AS minprice
     FROM products
     WHERE available=1 AND amount > 0
     GROUP BY group_id
   ) G ON P.group_id = G.group_id AND P.price = G.minprice
GROUP BY P.group_id, P.price, P.amount, P.available
ORDER BY P.group_id


请注意,如果您有一个大表,则可能需要对价格列进行索引(或组合索引group_id + price)

在其他支持窗口功能的RDBMS上会更简单

关于mysql - 如何获得与组组合的排序列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44847259/

10-16 13:37