我試圖以最低的價格獲得完整的行,而不僅僅是具有最低價格的字段。MySQL:以最小值獲取滿行
創建表:
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中具有最低的價格。
你'組by'使用是無效的SQL。但是,MySQL不是拒絕它,而是選擇簡單地返回「不確定」結果(這對於所有實際目的都是「隨機的」)。有關更多詳細信息,請參閱:http://www.mysqlperformanceblog.com/2006/09/06/wrong-group-by-makes-your-queries-fragile/ –
如果有兩件產品的子產品和產品具有相同的最低價格? – StanislavL
然後,哪個列被佔用並不重要。 – Hativ