SQL Group by在单个查询中使用min和相应的值

时间:2016-09-08 12:40:19

标签: sql sql-server-2008 grouping

我能以优化的方式用最小值和相应的值编写单个查询返回组吗?目前我们正在使用多个查询。

例如: 表格包含产品类别,产品名称,产品ID和价格。我想以min(价格)返回产品类型,还要返回产品名称和产品ID。这是在SQL 2008中。产品名称和产品ID可以重复

编辑1:为了清晰起见,添加了输入和输出 enter image description here

2 个答案:

答案 0 :(得分:0)

第一个注意事项是SQL是一种声明性语言;它声明了一个功能需求,而不是如何解决该需求(SQL是根据统计数据,索引,提示等等编译并解释到解释/执行计划中,然后那是什么被执行。)

也就是说,一些SQL表达式比其他表达式更昂贵。您的案例有一个使用分析函数(也称为窗口函数)的简单解决方案,由于只扫描表(或适当的索引),因此成本较低。

"links" : [
        {
            "link" : "google.es",
            "_id" : ObjectId("57d15ed8b9859615ef11e8b6"),
        },
        {
            "link" : "gog.com",
            "_id" : ObjectId("57d15ed8b9859615ef11e8b7"),
        },
        {
            "link" : "google.es",
            "_id" : ObjectId("57d15ed8b9859615ef11e8b6"),
        },
        {
            "link" : "gog.com",
            "_id" : ObjectId("57d15ed8b9859615ef11e8b7"),
        }
    ],

答案 1 :(得分:0)

SELECT * FROM (
 SELECT ProductCatg, ProductName, ProductID, MIN(PRICE), DateOrdered 
 FROM YOUR_TABLE 
 GROUP BY ProductCatg, ProductName, ProductID, DateOrdered ) A
 WHERE A.PRICE = (SELECT MIN(PRICE) 
                 FROM YOUR_TABLE 
                 WHERE ProductCatg = A.ProductCatg AND ProductName = A.ProductName )