求教一个SQL的写法,如何更有效率?

woshizhaoxuhui 2014-05-27 02:39:43
表结构如下

航班号 Flight_NO
旅客姓名 Name
进港标示 In_Flag 1或0
出港标示 Out_Flag 1或0
会员标示 Mem_Flag 1或0
其中,同一个航班可能是进港也可能是出港,进港标示和出港标示相反,也就是要么出港为1进港为0,要么出港为0进港为1
现在要按 航班号 统计如下数据
进港人数,出港人数,会员人数,会员出港率,会员进港率

我能写出来,但上面几项都是分了好几次查询才出来,感觉效率很差,想请教如何写效率比较高,谢谢
...全文
136 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
starseeker7 2014-05-27
  • 打赏
  • 举报
回复
70W数据3秒肯定是慢了,请适当添加索引 建议使用 set statistics io on set statistics time on 来看看实际的资源消耗更为准确 对0,1两种单纯的做group by效果并不好 最好贴出你现有语句,我们来看看有没有可以改动的地方
woshizhaoxuhui 2014-05-27
  • 打赏
  • 举报
回复
其实这个SQL不难,就是需要得出的项比较多,问题中只是需要统计的一部分 我就是看着这么多的语句,总想能精简一下
woshizhaoxuhui 2014-05-27
  • 打赏
  • 举报
回复
引用 2 楼 xxzxwsx 的回复:
必须分几次查呀,效率不会差吧
效率还可以吧,70万条记录,加条件进行查询基本在3秒左右,不知道是否算慢
woshizhaoxuhui 2014-05-27
  • 打赏
  • 举报
回复
引用 1 楼 starseeker7 的回复:
进港标示 和 出港标示 放在一个字段里就可以了,InOrOut 0为进,1为出 你的查询都比较单纯没啥好优化的 实在数据量大就对表做时间切割,按年,按季度,按月,按周,按日 根据你的数据量做一个符合你性能需求的切割方式 至于大型报表太慢怎么办的话,可以考虑做汇总表,每个周期产生汇总,反正你的数据应该不会有修改历史数据的需求,使用汇总表输出大时间跨度需求正好
我本来想用CASE来区分,但是发现涉及的字段都必须写在GROUP BY 后面,还是不行
在路上_- 2014-05-27
  • 打赏
  • 举报
回复
必须分几次查呀,效率不会差吧
starseeker7 2014-05-27
  • 打赏
  • 举报
回复
进港标示 和 出港标示 放在一个字段里就可以了,InOrOut 0为进,1为出 你的查询都比较单纯没啥好优化的 实在数据量大就对表做时间切割,按年,按季度,按月,按周,按日 根据你的数据量做一个符合你性能需求的切割方式 至于大型报表太慢怎么办的话,可以考虑做汇总表,每个周期产生汇总,反正你的数据应该不会有修改历史数据的需求,使用汇总表输出大时间跨度需求正好

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧