Mysql 优化按行分组的结果值(由于查询包含子查询,因此无法创建视图)

Mysql 优化按行分组的结果值(由于查询包含子查询,因此无法创建视图),mysql,group-by,controls,Mysql,Group By,Controls,我有下表: ---------------------------- | id | product | price | ---------------------------- | 1 | 1 | 50 | | 2 | 1 | 39 | | 3 | 1 | 60 | ---------------------------- 我需要的是获得按产品(1)分组的最低价格(39),并保留最

我有下表:

 ----------------------------
|  id  |  product  |  price  |
 ----------------------------
|  1   |  1        |  50     |
|  2   |  1        |  39     |
|  3   |  1        |  60     |
 ----------------------------
我需要的是获得按产品(1)分组的最低价格(39),并保留最低价格的id(2)

我有这个疑问

SELECT
    id,
    product,
    MIN(price) AS price
FROM
    variant
GROUP BY
    product
select B.id, A.* FROM
(SELECT product,MIN(price) AS minprice 
FROM variant GROUP BY product ) A
JOIN variant B ON A.product = B.product and A.minprice = B.price
结果

 ----------------------------
|  id  |  product  |  price  |
 ----------------------------
|  1   |  1        |  39     |
 ----------------------------
但我想要的结果是

 ----------------------------
|  id  |  product  |  price  |
 ----------------------------
|  2   |  1        |  39     |
 ----------------------------
我可以通过这个查询得到结果

SELECT
    id,
    product,
    MIN(price) AS price
FROM
    variant
GROUP BY
    product
select B.id, A.* FROM
(SELECT product,MIN(price) AS minprice 
FROM variant GROUP BY product ) A
JOIN variant B ON A.product = B.product and A.minprice = B.price
但是我还需要使用这个查询创建一个视图,因为from中有一个子select,所以我无法创建该视图

有没有其他方法可以得到我想要的结果


我做了一个修改:

您可以创建另一个视图作为子查询, 然后创建与第一个视图连接的视图,而不是子查询

CREATE VIEW min_variant AS
SELECT product,MIN(price) AS minprice 
FROM variant 
GROUP BY product;

CREATE VIEW min_product AS
SELECT B.id, A.* 
FROM min_variant A
INNER JOIN variant B 
ON A.product = B.product
AND A.minprice = B.price;

您可以创建另一个视图作为子查询, 然后创建与第一个视图连接的视图,而不是子查询

CREATE VIEW min_variant AS
SELECT product,MIN(price) AS minprice 
FROM variant 
GROUP BY product;

CREATE VIEW min_product AS
SELECT B.id, A.* 
FROM min_variant A
INNER JOIN variant B 
ON A.product = B.product
AND A.minprice = B.price;