sql - 如何从复杂条件下的表中选择值?
问题描述
我有一个包含 3 列的表:course_name, year, semester
.
现在我想找出每年(2001 年和 2002 年)每个学期(S1 和 S2)都有哪些科目。
我尝试了一个小时的写作CASE WHEN
,GROUP BY HAVING
但未能得到正确的结果。
表主题:
course_name| year| semester
Programming 2001 S1
Programming 2001 S2
Programming 2002 S1
Programming 2002 S2
Law 2001 S1
Law 2001 S2
Law 2002 S2
Science 2001 S1
Science 2001 S2
Management 2002 S2
AI 2001 S1
Database 2001 S1
Database 2001 S2
Database 2002 S1
Database 2002 S2
预期结果:
|course_name|
Programming
Database
解决方案
你可以试试下面 -
select course_name
from t1 a
where year in (2001,2002) and exists (select 1 from t1 b where a.course_name=b.course_name
and a.year=b.year and semester in ('S1','S2') having count(distinct semester)=2)
group by course_name
having count(distinct year)=2
输出:
course_name
Database
Programming
推荐阅读
- html - CSS float+align 属性产生意想不到的结果
- ruby-on-rails - 验证:在 Rails 控制器中使用自定义方法
- javascript - iframe中src属性的动态高度和宽度
- java - 从 jsonResponse 有效负载传递保存的变量是在保存值的开头添加一个减号
- c++ - PJSIP 从当前通话中获取编解码器
- python - 使用带有鼻子的类和单元测试类的区别
- c - 时钟()在 Windows 机器上返回负时差
- javascript - 使用 require.context 解析包含降价文件的路径
- r - 将标签放在 R ggraph 包中的节点内
- java - 如何解析在 Java 中未表示为集合的 JSON 文档