我的表结构是这个
id last_mod_dt nr is_u is_rog is_ror is_unv
1 x uuid1 1 1 1 0
2 y uuid1 1 0 1 1
3 z uuid2 1 1 1 1
我希望行数为:
is_ror=1 or is_rog =1
is_u=1
is_unv=1
全部在一个查询中。有可能吗?
我面临的问题是nr的值可能与上表中的情况相同。
答案 0 :(得分:1)
案例陈述提供了mondo灵活性......
SELECT
sum(case
when is_ror = 1 or is_rog = 1 then 1
else 0
end) FirstCount
,sum(case
when is_u = 1 then 1
else 0
end) SecondCount
,sum(case
when is_unv = 1 then 1
else 0
end) ThirdCount
from MyTable
答案 1 :(得分:0)
如果“单个查询中的所有内容”都不会取消对子选择的限制,那么听起来很简单;
SELECT
(SELECT COUNT(DISTINCT nr) FROM table1 WHERE is_ror=1 OR is_rog=1) cnt_ror_reg,
(SELECT COUNT(DISTINCT nr) FROM table1 WHERE is_u=1) cnt_u,
(SELECT COUNT(DISTINCT nr) FROM table1 WHERE is_unv=1) cnt_unv;
答案 2 :(得分:0)
你可以使用union来获得多个结果,例如
从is_ror = 1或is_rog = 1的表中选择count(*) 联盟 从is_u = 1的表中选择count(*) 联盟 从is_unv = 1
的表中选择count(*)然后结果集将包含三行,每行包含一个计数。
答案 3 :(得分:0)
像
这样的东西SELECT
SUM(IF(is_u > 0 AND is_rog > 0, 1, 0)) AS count_something,
...
from table
group by nr
我认为它会起作用
我当然不确定你想要什么,但我相信你可以使用逻辑来产生你想要的结果。