MySQL:获取最小值的完整行

时间:2014-03-12 08:11:52

标签: mysql sql

我试图获得价格最低的完整行,而不仅仅是价格最低的行。

创建表格:

CREATE TABLE `Products` (
  `SubProduct` varchar(100),
  `Product` varchar(100),
  `Feature1` varchar(100),
  `Feature2` varchar(100),
  `Feature3` varchar(100),
  `Price1` float,
  `Price2` float,
  `Price3` float,
  `Supplier` varchar(100)
);

插入:

INSERT INTO
  `Products` (`SubProduct`, `Product`, `Feature1`, `Feature2`, `Feature3`, `Price1`, `Price2`, `Price3`, `Supplier`)
VALUES
  ('Awesome', 'Product', 'foo', 'foo', 'foor', '1.50', '1.50', '0', 'supplier1'),
  ('Awesome', 'Product', 'bar', 'foo', 'bar', '1.25', '1.75', '0', 'supplier2');

选择

SELECT
  `SubProduct`,
  `Product`,
  `Feature1`,
  `Feature2`,
  `Feature3`,
  MIN(`Price1`),
  `Price2`,
  `Price3`,
  `Supplier`
FROM `Products`
  GROUP BY `SubProduct`, `Product`
  ORDER BY `SubProduct`, `Product`;

您可以在http://sqlfiddle.com/#!2/c0543/1/0

看到

我从第二个插入的行中获得了第一行插入行price1的内容。

我希望获得包含正确功能,供应商和其他专栏的完整行。在此示例中,它应该是完整的第二个插入行,因为它具有列价格中的最低价格。

3 个答案:

答案 0 :(得分:2)

您需要获取MIN价格行,然后使用主表加入这些行,如下所示:

SELECT
  P.`SubProduct`,
  P.`Product`,
  P.`Feature1`,
  P.`Feature2`,
  P.`Feature3`,
  `Price` AS Price1,
  P.`Price2`,
  P.`Price3`,
  P.`Supplier`
FROM `Products` AS P JOIN (
    SELECT `SubProduct`, `Product`, MIN(`Price1`) AS Price
    FROM `Products`
    GROUP BY `SubProduct`, `Product`
  ) AS `MinPriceRows`
ON P.`SubProduct` = MinPriceRows.`SubProduct`
AND P.`Product` = MinPriceRows.`Product`
AND P.Price1 = MinPriceRows.Price
ORDER BY P.`SubProduct`, P.`Product`;

工作演示:http://sqlfiddle.com/#!2/c0543/20

我在这里做的是获取一个临时记录集作为MinPriceRows表,它将为每个SubProduct和Product提供MIN价格。然后我将这些行与主表连接,以便主表行可以简化为只包含每个SubProduct和Product的MIN价格的行。

答案 1 :(得分:1)

试试这个:

SELECT
  `p`.`SubProduct`,
  `p`.`Product`,
  `p`.`Feature1`,
  `p`.`Feature2`,
  `p`.`Feature3`,
 `p`.`Price1`,
  `p`.`Price2`,
  `p`.`Price3`,
  `p`.`Supplier`
FROM `Products` `p`
inner join (select MIN(`Price1`)as `Price1`
            From `Products`
           ) `a` on `a`.`Price1` = `p`.`Price1`

ORDER BY `p`.`SubProduct`, `p`.`Product`;

演示:http://sqlfiddle.com/#!2/c0543/24

答案 2 :(得分:0)

这有效......

SELECT
P1.`SubProduct`,
P1.`Product`,
P1.`Feature1`,
P1.`Feature2`,
P1.`Feature3`,
P1.`Price1`,
P1.`Price2`,
P1.`Price3`,
P1.`Supplier`
FROM `Products` P1
INNER JOIN `Products` P2 ON  P1.SubProduct = P2.SubProduct AND P1.Product = P2.Product
WHERE P1.Price1 < P2.Price1