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哪个效率会高点?
展开
 我来答
百度网友e425885af
2010-01-31 · TA获得超过7650个赞
知道大有可为答主
回答量:2940
采纳率:0%
帮助的人:2727万
展开全部
你的补充问题牵扯到的是一个物理问题,其实数据库在进行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以后
阳光上的桥
2010-01-31 · 知道合伙人软件行家
阳光上的桥
知道合伙人软件行家
采纳数:21423 获赞数:65813
网盘是个好东东,可以对话和传文件

向TA提问 私信TA
展开全部
标准的方法是使用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
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友65a15ed
2019-07-10
知道答主
回答量:1
采纳率:0%
帮助的人:728
展开全部
我感觉使用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逻辑你自己也很清楚了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
孛世庾宏浚
2020-02-29 · TA获得超过3702个赞
知道大有可为答主
回答量:3178
采纳率:28%
帮助的人:188万
展开全部
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对你有所帮助
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zgf1231
2010-01-31 · 超过22用户采纳过TA的回答
知道答主
回答量:78
采纳率:0%
帮助的人:0
展开全部
嵌套查询
select (select count(*) from `table` where `id1`=1 and `check`='b'),(2),(3) from table
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式