微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql-server – T-SQL GROUP BY:包含其他分组列的最佳方式

我是一个 MySQL用户,试图将一些事情移交给MS sql Server.

我加入了几张表,并通过GROUP BY汇总了一些列.

一个简单的例子就是员工和项目:

select empID,fname,lname,title,dept,count(projectID)
from employees E left join projects P on E.empID = P.projleader
group by empID

…这可以在MysqL中工作,但MS sql更严格,并且要求将所有内容都包含在聚合函数中,或者是GROUP BY子句的一部分.

所以,当然,在这个简单的例子中,我假设我可以在group by子句中加上额外的列.但是我正在处理的实际查询是相当复杂的,并且包括对一些非聚合列执行的一些操作,例如,它会被真正地丑陋,试图将它们全部包含在group by子句中.

那么有更好的方法来做到这一点吗?

解决方法

你可以让它处理这些行:
select e.empID,projectIDCount
from
(
   select empID,count(projectID) as projectIDCount
   from employees E left join projects P on E.empID = P.projleader
   group by empID
) idList
inner join employees e on idList.empID = e.empID

这样,您可以通过操作避免额外的组,您可以获取所需的任何数据.此外,您还有机会在某些情况下良好利用索引(如果您没有返回完整的信息),并且可以更好地与分页结合使用.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐