mysql 多条件查询问题.
可能我问的这个问题有点"变态".不过我确实是想找到一个有效的解决途径.这里有一张表table.id1id2id3id4check1111a1110a1101a1100b1...
可能我问的这个问题有点"变态".不过我确实是想找到一个有效的解决途径.
这里有一张表table.
id1 id2 id3 id4 check
1 1 1 1 a
1 1 1 0 a
1 1 0 1 a
1 1 0 0 b
1 0 1 1 b
1 0 1 0 b
1 0 0 1 c
1 0 0 0 c
0 1 1 1 c
像这种情况,
1,我要查出id1=1 and check=b 的条数.
对应sql就是 select count(*) from `table` where `id1`=1 and `check`='b';
2,我要查出id2=0 and check=b 的条数.
对应sql就是 select count(*) from `table` where `id2`=0 and `check`='b';
3,我要查出id3=1 and check=c 的条数.
对应sql就是 select count(*) from `table` where `id3`=1 and `check`='c';
像以上,查出每种情况,需要单独写一个sql,因为就是操作一张表,我想能不能使用一句sql返回以上三种情况?
感谢 阳光上的桥 ,按你的方法问题已解决,这也是我希望的方式.
还有个问题,sum求和肯定比count效率低,那和我分次发送sql哪个效率会高点? 展开
这里有一张表table.
id1 id2 id3 id4 check
1 1 1 1 a
1 1 1 0 a
1 1 0 1 a
1 1 0 0 b
1 0 1 1 b
1 0 1 0 b
1 0 0 1 c
1 0 0 0 c
0 1 1 1 c
像这种情况,
1,我要查出id1=1 and check=b 的条数.
对应sql就是 select count(*) from `table` where `id1`=1 and `check`='b';
2,我要查出id2=0 and check=b 的条数.
对应sql就是 select count(*) from `table` where `id2`=0 and `check`='b';
3,我要查出id3=1 and check=c 的条数.
对应sql就是 select count(*) from `table` where `id3`=1 and `check`='c';
像以上,查出每种情况,需要单独写一个sql,因为就是操作一张表,我想能不能使用一句sql返回以上三种情况?
感谢 阳光上的桥 ,按你的方法问题已解决,这也是我希望的方式.
还有个问题,sum求和肯定比count效率低,那和我分次发送sql哪个效率会高点? 展开
展开全部
你的补充问题牵扯到的是一个物理问题,其实数据库在进行groupby的时候原理是在缓存中创建一个临时空间,将表结构放进去,然后进行数学统计,所以通常,创建一次临时空间要比创建多次快,另外,如果你觉得sum效率差,其实
光上的桥 的程序也可以用count做
select
count(case when `id1`=1 and `check`='b' then 1 else null end) cnt1,
count(case when `id2`=0 and `check`='b' then 1 else null end) cnt2,
count(case when `id3`=1 and `check`='c' then 1 else null end) cnt3,
from `table`;
不过我也得要承认,其实这种简单运算的时候,count和sum其实基本没有区别,尤其是用了case when以后
光上的桥 的程序也可以用count做
select
count(case when `id1`=1 and `check`='b' then 1 else null end) cnt1,
count(case when `id2`=0 and `check`='b' then 1 else null end) cnt2,
count(case when `id3`=1 and `check`='c' then 1 else null end) cnt3,
from `table`;
不过我也得要承认,其实这种简单运算的时候,count和sum其实基本没有区别,尤其是用了case when以后
展开全部
标准的方法是使用UNION联合或者CASE,我认为CASE最好,联合的结果被混淆了,我写一个CASE的例子你试试看:
select
sum(case when `id1`=1 and `check`='b' then 1 else 0 end) cnt1,
sum(case when `id2`=0 and `check`='b' then 1 else 0 end) cnt2,
sum(case when `id3`=1 and `check`='c' then 1 else 0 end) cnt3,
from `table`;
语句输出的结果是这样的,非常直观吧:
cnt1 cnt2 cnt3
2 3 5
select
sum(case when `id1`=1 and `check`='b' then 1 else 0 end) cnt1,
sum(case when `id2`=0 and `check`='b' then 1 else 0 end) cnt2,
sum(case when `id3`=1 and `check`='c' then 1 else 0 end) cnt3,
from `table`;
语句输出的结果是这样的,非常直观吧:
cnt1 cnt2 cnt3
2 3 5
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我感觉使用union查询增加一个condition字段也很清晰,至少sql你是能懂的
select count(*) cnt,'1st' condition from `table` where `id1`=1 and `check`='b'
union
select count(*) cnt,'2nd' condition from `table` where `id2`=0 and `check`='b'
union
select count(*) cnt,'3rd' condition from `table` where `id3`=1 and `check`='c'
然后用condition字段区分到底是哪一个,你自己写的sql逻辑你自己也很清楚了。
select count(*) cnt,'1st' condition from `table` where `id1`=1 and `check`='b'
union
select count(*) cnt,'2nd' condition from `table` where `id2`=0 and `check`='b'
union
select count(*) cnt,'3rd' condition from `table` where `id3`=1 and `check`='c'
然后用condition字段区分到底是哪一个,你自己写的sql逻辑你自己也很清楚了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
select
*
from
table
where
uid='1'
and(status='1'
or
status='3')
select
*
from
table
where
(uid
='1'
and
status='1')
or
status
='3'
我还木看懂楼主的意思,希望这两条SQL对你有所帮助
*
from
table
where
uid='1'
and(status='1'
or
status='3')
select
*
from
table
where
(uid
='1'
and
status='1')
or
status
='3'
我还木看懂楼主的意思,希望这两条SQL对你有所帮助
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
嵌套查询
select (select count(*) from `table` where `id1`=1 and `check`='b'),(2),(3) from table
select (select count(*) from `table` where `id1`=1 and `check`='b'),(2),(3) from table
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询