【发布时间】:2011-03-02 05:07:43
【问题描述】:
我正在做这样的统计工作:
SUM |COND1 |COND2 |...
--------------------------
100 |80 | 70 |...
SUM 结果是从多个表中计算出来的,而 COND 是其中的子集。
我写了一个这样的sql:
select tmp1.id,sum,cond1,cond2 from (
select id, count(*) as sum from table1
group by table1.id) tmp1
left join (
select id, count(*) as cond1 from table1
where condition1
group by table1.id) tmp2 on tmp1.id=tmp2.id
left join (
select id, count(*) as cond2 from table1
where condition2
group by table1.id) tmp3 on tmp1.id=tmp3.id
问题是这样效率很差,如果能用tmp1的结果就更好了,但我不知道怎么做。
更新:简化了 sql, 本例中的第一个子查询:
select id, count(*) as sum from table1
group by table1.id) tmp1
是简化的,真正的是一个相当复杂的查询, 我的意思是当我计算 cond1 和 cond2 时如何重用这个嵌套的选择结果。
【问题讨论】:
-
您发布的内容过于抽象 - 请提供更多详细信息。遗憾的是,MySQL 不支持 WITH 子句...
标签: mysql select performance nested subquery