mysql - 如何在mysql中重用子查询结果

标签 mysql select performance nested subquery

我正在做这样的统计工作:

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 时如何重用这个嵌套的选择结果。

最佳答案

您应该尝试重写您的查询以仅在一次表扫描中完成所有操作。使用 IF 语句:

SELECT id, 
COUNT(*) AS sum, 
SUM( IF( condition1 , 1, 0 ) ) cond1, -- emulates a count where condition1
SUM( IF( condition2, 1, 0 ) ) cond2   -- same thing, for condition2
FROM table1
GROUP BY id

如果你想写出正确的查询,请发布你的表结构:)

关于mysql - 如何在mysql中重用子查询结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3015305/

相关文章:

mysql - Doctrine 2 mysql FIELD函数按顺序排列

mysql替换字符串+下一个字符

select - 悬停时 IE8 和 IE9 选择框会自行关闭

sql - Oracle 中搜索哪个更快

mysql搜索where子句,每个条件有不同的分数

android - 在 Android 上使用 rawQuery SELECT .. WHERE ... IN

PHP/MySQL : Slowly iterate through 6k rows and for every row create new records - Algorithm

html - 哪个 CSS 更快?上限大小会提高速度吗?

java - JScrollPane 'laggy' 滚动,有很多组件

mysql - ubuntu 无法启动mysql