sql - 如何编写单个 SQL 查询以挑出具有多个条件的子组
问题描述
一个类应该对应一个id。班级选择如下:
选择最常见的 id 类(例如,id 333 对应于 A 类)。
但如果一个 id 对应于类“其他”和其他类,则该 id 被分配一个多数派类,而“其他”类不被考虑。在这种情况下,如果班级数相同,则分配最后一天的班级。例如,id 111 对应于 3 个类('other', A, B)。A类和B类的数量是两个。ID 111 被分配到 A 类,因为它是在最后一个日期。
如果该类仅分配了“others”类,则 id 对应于“others”类(例如,222 类被分配了“others”类,因为它仅分配了“others”类)。
解决方案
当您想从子集中选择任何一行时,您应该RANK
按条件对子集中的行进行排序,然后按排名过滤行。
您可以尝试使用此查询来解决您的问题。
select id, class
from (
Select
Id
, Class
, RANK() OVER (PARTITION BY Id
ORDER BY
case when class='other' then 0 else 1 end desc -- condition # 3
, count(*) desc -- condition # 1
, max(date1) desc ) AS RowRank -- condition # 2
from @table1
group by id, class
) Q
where rowrank = 1
推荐阅读
- python - 仅在 AWS 实例上阻止使用 Python 进行抓取 - 阻止请求
- c++ - 为什么初始化 std::vector 时不能使用模板整数?
- discord.py - discord.py 公会加入 dmall
- google-apps-script - 将变量从一个 html 页面传递到另一个 html 页面
- leaflet - 传单:如何缩放以保持固定位置?
- django - Django,get和filter查询集方法的属性
- ajax - 如何同时运行多个ajax请求
- vim - 如何对 EJS 文件使用 vim 自动完成功能
- python - Elastic Beanstalk - 命令“/opt/python/run/venv/bin/pip install -r /opt/python/ondeck/app/requirements.txt”返回非零退出状态 1
- swiftui - 使用 SwiftUI 显示错误