首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >聚合查询分组

聚合查询分组
EN

Stack Overflow用户
提问于 2014-11-10 11:46:22
回答 1查看 56关注 0票数 2

尽管存在错误,但下面的查询似乎仍然有效。

Color列不属于聚合函数,但我不想按Color分组。我想返回颜色的最低优先级分组的车辆。

我希望下面的内容已经足够了--我希望能得到一个快速的答案,但如果有必要的话,我会更详细地讨论。

代码语言:javascript
运行
复制
SELECT alert.VehicleID,
       min(hotcol.[Priority]) as [Priority]
       min(hotcol.Color) as Color,
FROM [ALERTS] alert
    INNER JOIN [HOTLISTS] hotlist ON alert.[HotlistID] = hotlist.[HotlistID]
    INNER JOIN [HOTLIST_COLORS] hotcol ON hotlist.ColorID = hotcol.ColorID
WHERE VehicleID = 17513851
GROUP BY alert.VehicleID
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-10 11:50:24

您可以使用排名函数ROW_NUMBER来完成此操作。就像这样:

代码语言:javascript
运行
复制
WITH CTE
AS
(
   SELECT 
     alert.VehicleID,
     hotcol.Color,
     hotcol.[Priority],
     ROW_NUMBER() OVER(PARTITION BY alert.VehicleID 
                       ORDER BY hotcol.[Priority]) AS RN
   FROM [ALERTS] alert
   INNER JOIN [HOTLISTS] hotlist ON alert.[HotlistID] = hotlist.[HotlistID]
   INNER JOIN [HOTLIST_COLORS] hotcol ON hotlist.ColorID = hotcol.ColorID
   WHERE VehicleID = 17513851
)
SELECT 
  VehicleID,
  Color,
  [Priority]
FROM CTE 
WHERE rn = 1;

ROW_NUMBER函数将为每个alert.VehicleID提供一个排序编号,每个组将由priority排序。然后,WHERE rn = 1将过滤除最小行外的所有行,其中包含rn = 1

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26843130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档