首页 / MYSQL / Mysql – 条件组
Mysql – 条件组
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Mysql – 条件组,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1752字,纯文字阅读大概需要3分钟。
内容图文
![Mysql – 条件组](/upload/InfoBanner/zyjiaocheng/899/683eac99930c4e229e6cc3537201f72f.jpg)
我试图一起使用CASE和GROUP BY来有条件地过滤结果,只要它们符合CASE标准,如果它们不符合,则返回结果,好像没有指定GROUP BY标准.
这是我所拥有的简单模型:
es.id | es.acct_num | p.id | p.name
1001 | 4306-0 | 1569 | The High School
1002 | 4306-0 | 1569 | The High School
665 | 5906-7 | 981 | Rec Center
783 | 5906-7 | 1221 | The Gym
这就是我想看到的:
es.id | es.acct_num | p.id | p.name
1001 | 4306-0 | 1569 | The High School
1002 | 4306-0 | 1569 | The High School
0 | 5906-7 | 0 | MULTI-SITE
由于es.acct_num 5906-7有超过1个不同的关联p.id,我希望它按es.acct_num分组为1行项,然后将es.id,p.id表示为’0′,并且具有由字符串’MULTI-SITE’表示的p.name.
但是,由于es.acct_num 4306-0只有1个不同的关联p.id,我希望这些都作为单独的行项返回,就像没有应用分组条件一样.
解决方案逃脱了我.我怎么能做到这一点?
解决方法:
您可以使用条件聚合执行此操作:
SELECT (case when count(*) > 1 then 0 else max(es.id) end) as esid,
es.acct_num,
(case when count(*) > 1 then 0 else max(p.id) end) as pid,
(case when count(*) > 1 then 'MULTI-SITE' else p.name end) as name,
COUNT(*) AS cnt
FROM es join
p
on . . .
GROUP BY es.acct_num;
不要被max()表达式所迷惑.案例的那一部分只有一行,所以这些只返回该行的值.
编辑:
我认为您需要使用相关子查询,连接/聚合或使用变量计算值.使用窗口函数,几乎任何其他数据库都会更容易.这是一个想法,如果没有看到完整的查询,有点难以详细表达:
SELECT (case when esp.cnt > 1 then 0 else max(es.id) end) as esid,
es.acct_num,
(case when esp.cnt > 1 then 0 else max(p.id) end) as pid,
(case when esp.cnt > 1 then 'MULTI-SITE' else p.name end) as name
FROM es join
p
on . . . join
(select es.acct_num, count(distinct p.id) as cnt
from . . .
group by es.acct_num
) esp
on esp.acct_num = es.acct_num
GROUP BY es.acct_num, (case when cnt = 0 then es.id end);
内容总结
以上是互联网集市为您收集整理的Mysql – 条件组全部内容,希望文章能够帮你解决Mysql – 条件组所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。