有个需求以用户为维度进行统计订单,并显示出用户相关信息,那么我写 sql 的时候,用下面哪种方式比较合适
第一种是把用户信息相关的字段放到 group by 中,在 select 中就也可以显示相应的字段,这样一个 sql 语句就可以查询出来统计信息和用户信息。
select count(userid), user_id ,user_name ,user_type ,user_level ... from user group by user_id, user_name, user_type, user_level
第二种是先按照 user_id 进行聚合统计,然后再根据 userid 查表,补全用户信息,这样就需要查两次
select count(userid), user_id, ... from ... group by user_id
select ... from ... where user_id in (...)
第一种方式明显是更简单的,但是把很多冗余的字段放到 group by 的条件中,会不会有性能问题,或者第一种写法可能会带来其他问题,求助下大家的意见,如果有更好的 sql 写法,也希望大家能够帮忙分享一下经验。
ps:无论第一种还是第二种,都需要联表查询
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.