大概如此,a为表名,c就是你的conditionSELECT * , sum(if(c='c',1,0)) as v, sum(if(c='a',1,0)) as w
FROM `a`
group by id
having v=0 and w>0if应该是3.23就有的,还可以用case代替if
FROM `a`
group by id
having v=0 and w>0if应该是3.23就有的,还可以用case代替if
SELECT * , sum(if(c='c',1,0)) as v
FROM `a` where c='a'
group by id
having v=0
好像能够使用索引了。但是还是有use temporary,using filesort
不知这个语句在大表上工作起来效率如何?
SELECT * , sum(if(c='c',1,0)) as v, sum(if(c='a',1,0)) as w
FROM `a`
where c in ('a','c')
group by id
having v=0 and w>0这样在where语句部分是使用了c上的索引的,速度会快一些。只使用c='a' 不行,因为‘c’没有统计到。
好像是可以了,有时间仔细研究一下。
另外好像手册对having的用法介绍很简单,你这种用法我还是第一次看到,能否给推荐一个这种用法的详细介绍?
一般的sql书都会介绍到。
网上也能找到一些文章的。