首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更有效的sql查询方法

更有效的sql查询方法
EN

Stack Overflow用户
提问于 2015-03-13 08:25:38
回答 1查看 79关注 0票数 0

RGN ->区域名称,需要对每个区域进行统计的->事件,用于区域的->过滤器。因此,在NPR新闻中,我有汽车牌照的活动,我需要计算每一个地区的汽车牌照,并将其分成一周的7天。我的解决办法如下:

代码语言:javascript
复制
SELECT DISTINCT a.NAME,
COUNT(CASE WHEN DATEPART(dw,b.TM) = 1 THEN 1 ELSE null END) as MON,
COUNT(CASE WHEN DATEPART(dw,b.TM) = 2 THEN 1 ELSE null END) as TUE, 
COUNT(CASE WHEN DATEPART(dw,b.TM) = 3 THEN 1 ELSE null END) as WED, 
COUNT(CASE WHEN DATEPART(dw,b.TM) = 4 THEN 1 ELSE null END) as THU, 
COUNT(CASE WHEN DATEPART(dw,b.TM) = 5 THEN 1 ELSE null END) as FRI, 
COUNT(CASE WHEN DATEPART(dw,b.TM) = 6 THEN 1 ELSE null END) as SAT, 
COUNT(CASE WHEN DATEPART(dw,b.TM) = 7 THEN 1 ELSE null END) as SUN 
FROM RGN a 
LEFT JOIN NPR b 
ON a.ID IN  (
SELECT c.RGID
FROM RGF c
WHERE RTRIM(b.NUM) like RTRIM((REPLACE(c.RGFLT,'?','_')))
)
Group by a.NAME;

在筛选器中,我需要将?替换为_以获得like()表达式。

这个查询给了我很好的结果,但是数据库中有4百万条记录,需要20分钟才能得到。你知道如何做到完全相同,但效率更高吗?

我试过使用SUM()而不是count,但是它不会改变任何东西。

@编辑我的下一次尝试是SELECT FROM NPRjoin RGN,速度有点快,但还不够。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-13 13:39:38

代码语言:javascript
复制
SELECT a.NAME,
COUNT(CASE WHEN DATEPART(dw,b.TM) = 1 THEN 1 ELSE null END) as MON,
COUNT(CASE WHEN DATEPART(dw,b.TM) = 2 THEN 1 ELSE null END) as TUE, 
COUNT(CASE WHEN DATEPART(dw,b.TM) = 3 THEN 1 ELSE null END) as WED, 
COUNT(CASE WHEN DATEPART(dw,b.TM) = 4 THEN 1 ELSE null END) as THU, 
COUNT(CASE WHEN DATEPART(dw,b.TM) = 5 THEN 1 ELSE null END) as FRI, 
COUNT(CASE WHEN DATEPART(dw,b.TM) = 6 THEN 1 ELSE null END) as SAT, 
COUNT(CASE WHEN DATEPART(dw,b.TM) = 7 THEN 1 ELSE null END) as SUN
FROM RGN a, RGF c
left JOIN NPR b
ON RTRIM(b.NUM) like RTRIM((REPLACE(c.RGFLT,'?','_')))
WHERE a.ID = c.RGID AND b.TM BETWEEN
Group by a.RGNAME

具有100 k行~4s的执行时间,足够好,因为它是~12s

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

https://stackoverflow.com/questions/29027698

复制
相关文章

相似问题

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