使用select和group by的简单SQL查询

Ofi*_* A. 2 sql t-sql sql-server select group-by

我有一些问题需要理解.

我有下一张桌子:

ID  PROD    PRICE
1   A        10
2   B        20
3   C        30
4   A        1
5   B        12
6   C        2
7   A        7
8   B        8
9   C        9
10  A        5
11  B        2
Run Code Online (Sandbox Code Playgroud)

我想获得所有产品的所有最低价格,这意味着我希望获得3条记录,即每个产品的最低价格.从上面的例子中,这是我想要的:

ID  PROD    MIN(PRICE)
4   A       1
11  B       2
6   C       2
Run Code Online (Sandbox Code Playgroud)

这是我写的查询:

select id, prod, min(price)
from A1
group by(prod);
Run Code Online (Sandbox Code Playgroud)

但这是我得到的记录:

ID  PROD    MIN(PRICE)
1   A        1
2   B        2
3   C        2
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,ID值是错误的,它只给我一些行计数器,而不是实际的ID值.

您可以在下一个链接查看

我做错了什么?

Joh*_*Woo 8

SELECT  a.*
FROM    A1 a
        INNER JOIN
        (
            SELECT Prod, MIN(Price) minPrice
            FROM A1
            GROUP BY Prod
        ) b ON a.Prod = b.Prod AND
                a.Price = b.minPrice
Run Code Online (Sandbox Code Playgroud)

对于 MSSQL

SELECT ID, Prod, Price
FROM
(
  SELECT ID, Prod, Price,
        ROW_NUMBER() OVER(Partition BY Prod ORDER BY Price ASC) s
  FROM A1
) a
WHERE s = 1
Run Code Online (Sandbox Code Playgroud)