簡體   English   中英

MySQL:獲取具有最小值的完整行

[英]MySQL: Get the full row with min value

我正在嘗試以最低的價格獲得完整的行,而不僅僅是價格最低的字段。

創建表:

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列的內容。

我希望獲得具有正確功能,供應商和其他列的完整行。 在此示例中,它應該是完整插入的第二行,因為它的價格在列price1中是最低的。

您需要獲取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表,該表將為您提供每個子產品和產品的MIN價格。 然后,我將這些行與主表連接起來,以便可以將主表行減少為僅包含每個SubProduct和Product MIN價格的行。

試試這個:

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

這有效...

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM