多表子查询sql优化问题

haigou20 发布于 2013/03/06 11:04
阅读 991
收藏 1

请看一下语句如何优化,我自己看得都有点别扭,但有想不到有什么更好的方法

想要实现的效果是统计产品订购排名,total-订购量,to_number-会员推荐量,r_number-成功推荐量,nyl_vas_orders-订购表(to_number字段不为空是为推荐记录,rstate=1是推荐成功)

select
count(nvo.id) as total,
(
    select count(nvo1.id)
    from nyl_vas_orders as nvo1
    where nvo1.to_number!='' and nvo1.app_id 
    in (
        select na1.id from nyl_archives as na1 where na1.typeid=na.typeid)
    )
as to_number,
(
    select count(nvo2.id)
        from nyl_vas_orders as nvo2
        where nvo2.to_number!='' and nvo2.rstate = 1 and nvo2.app_id 
        in (
            select na1.id from nyl_archives as na1 where na1.typeid=na.typeid)
        )
as r_number,
nat.typename,nat.id as type_id from nyl_vas_orders as nvo
left join nyl_archives as na on nvo.app_id=na.id
left join nyl_arctype as nat on na.typeid=nat.id
group by na.typeid
order by total desc
limit 10

加载中
0
红薯
红薯
对于 SQL 关键字不使用大写的 osc 员工,都会被我骂
Barb1eQ
Barb1eQ
弱弱的问一句。。。为什么一定要大写吖。。。
haigou20
haigou20
我就是觉得太复杂了,才上来想“专家们”请教学习,我想知道如何改进
红薯
红薯
回复 @haigou20 : 其他就是你这个 SQL 语句真的很复杂。如果是用于后台管理那无所谓,如果是给用户提供的数据,那就太复杂了,性能会很差
haigou20
haigou20
@红薯 嗯,同意。除了这个问题之外,还有哪些地方需要改进的呢
红薯
红薯
回复 @haigou20 : 主要是为了区分字段和关键字:)
下一页
0
异常爱
异常爱
我SQL,全大写
0
wx---羊毛联盟
wx---羊毛联盟

都跑题啦, 我感觉你的需求用一个SQL出来,比较累.建议多个SQL吧. 或者写存储过程.

wx---羊毛联盟
wx---羊毛联盟
@haigou20 就是把几个SQL,在一块执行. 没什么太难的.
haigou20
haigou20
写存储过程怎么做?
0
M
MyLong

创建一个视图吧,然后直接一条简单SELECT语句就能得到预期查询结果,且查询性能比这条SQL高多了!

 SQL关键字建议 按照 红薯 说的那样用大写,这是一个好习惯,利大于弊!

0
StormFour
StormFour

不知道mysql支不支持with字句,换我会弄3个子句出来再进行关联。就会看得顺眼多了。

返回顶部
顶部