sql - SQL - 具有多个条件的分组集
问题描述
我有一个大型(1500 万条记录)数据库,我们从中生成许多不同的表,我们正在尝试重构我们的代码以在一个基础数据集中生成所有信息。这导致我使用了多个 UNION,它们通常有一个不同的过滤器,或者按一个额外的变量分组。这导致代码很长(我认为总数将是 8 个左右的 UNION)。
我一直在阅读有关分组集的内容,从表面上看,这似乎是解决问题的理想方法。我遇到的问题是 HAVING 子句。我的很多 UNIONS 对相同的变量进行不同的过滤;所以我不确定是否可以设置 HAVING 子句以在一个分组集中包含一个变量子集,在下一个组中包含另一个子集。
一个非常简单的例子。参加音乐比赛的人,您可以使用每种乐器多次参加,也可以使用多种乐器参加。我们的原始数据是每人每条记录一行。我们想为每种乐器取最好的分数:
Select Person_ID, Solo_group, instrument_type, Instrument
, Max (Score) as [Score]
into #Scores
from #Entries
where Solo_group = 1
where instrument in (Flute, guitar, oboe, drums, tuba, violin)
Group by Person_ID, Solo_group, instrument_type, Instrument
UNION
Select Person_ID, Solo_group, instrument_type
, 'Specialist' as [Instrument]
, Max (Score) as [Score]
into #Scores
from #Entries
where Solo_group = 1
where instrument in (Flute, guitar, oboe, drums, tuba, violin)
Group by Person_ID, Solo_group, instrument_type
UNION
Select Person_ID, Solo_group, instrument_type, [Instrument]
, Max (Score) as [Score]
into #Scores
from #Entries
where Solo_group = 0
Group by Person_ID, Solo_group, instrument_type, [Instrument]
代码可能有错误,我只是临时编造的。但问题是: - 第一批在“专业”乐器中为每个人提供每个乐器的最高分数 - 第二批做同样的事情,但对于所有专业乐器的组合 - 第三批包括所有乐器,但包括独奏和团体表演。
所以对于分组集,我很确定我可以使用:
Grouping sets (
(Person_ID, Solo_group, instrument_type, Instrument),
(Person_ID, Solo_group, instrument_type)
)
但是第一个分组集需要以不同的方式应用 solo_group 过滤器(在我的实际代码中,还有更多需要区分的地方)。是否可以使用 HAVING 将 solo_group 变量以不同的方式应用于同一分组集?另外值得注意的是,where 子句中的 [instrument] 过滤器也需要区分。
我刚刚有一个想法,我想我实际上需要三个分组集:
Grouping sets (
(Person_ID, Solo_group, instrument_type, Instrument),
(Person_ID, Solo_group, instrument_type, Instrument),
(Person_ID, Solo_group, instrument_type)
)
但是对于第二组来说,有一个额外的变量可以将它与第一组区分开来(例如,一个虚拟变量将其标识为solo_group = 0 组)。那么有三个 HAVING 子句?每组一个?
如果这是可能的,那么 HAVING 原因会是什么样子?我很难弄清楚它们的实际工作方式。
解决方案
推荐阅读
- pyqt - QTableview: How to add a blank row at the bottom and have it show delegates
- javascript - 样式模式下的highcharts列笔划
- mysql - Mysql触发器:OLD和NEW如何序列化为字符串?
- excel - 如果另一个在 vba 中的单元格范围内发生更改,则清除单元格内容
- javascript - Internet Explorer 错误 SCRIPT1014 无效字符`
- reactjs - React jsx - 在地图函数内进行条件渲染时出现意外令牌错误
- laravel - 在 Redis 中使用标签缓存键会降低性能
- java - 在intellij的一个包中创建两个包
- r - R:如何修改槽的值?
- ios - 自定义 UINavigationBar 不尊重给定的高度