当多个规则处于活动状态时,如何计算子查询的和?

塞达特(Sedat Kaymaz)

我正在尝试使用以下规则从以下session_values表计算val字段的总和:

  • 事件字段只能具有“开始”和“停止”值
  • 当sessionid具有两种事件类型时,将使用“ stop”事件的val字段进行计算。例如,将10用于会话ID 1,将5用于会话ID 4
  • 如果sessionid只有'start'或'stop',则val字段将用于sessionid。例如,sessionid 2的值为6而sessionid 5的值为7

    mysql> select * from session_values;
    +-------------------------+-----------+-------+------+
    | time                    | sessionid | event | val  |
    +-------------------------+-----------+-------+------+
    | 2019-07-24 15:52:24.671 | 1         | start |    5 |
    | 2019-07-24 15:52:27.730 | 1         | stop  |   10 |
    | 2019-07-24 15:52:30.658 | 2         | stop  |    6 |
    | 2019-07-24 15:52:33.919 | 3         | stop  |    8 |
    | 2019-07-24 15:52:44.671 | 4         | start |    5 |
    | 2019-07-24 15:52:47.293 | 4         | stop  |    5 |
    | 2019-07-24 16:36:03.097 | 5         | start |    7 |
    | 2019-07-24 16:36:09.399 | 6         | start |    3 |
    +-------------------------+-----------+-------+------+
    

请参考以下网址以获取详细信息:http : //www.sqlfiddle.com/#!9/23b7a1/4

我使用以下sql代码来计算仅一个事件的sessionid之和:

select sum(val) from ( 
  select * from (select * from session_values ) s1 
  where s1.event in ('start','stop') 
  group by sessionid  
  HAVING COUNT(DISTINCT s1.event) = 1
) s2 ;

可以正常工作并返回24

以下sql用于具有多个事件的sessionid:

select sum(val) from ( 
  select * from (select * from session_values ) s1 
  where s1.event in ('start','stop') 
  group by sessionid  
  HAVING COUNT(DISTINCT s1.event) = 2
) s2 ;

我有两个问题:

第一个问题是,我找不到一种方法来确保第二个SQL仅返回“ stop”事件(包含多个事件),这意味着在运行以下查询时,我只会获得“ start”事件。是否可以增强查询以仅返回“停止”事件?

select * from ( 
  select * from (select * from session_values ) s1 
  where s1.event in ('start','stop') 
  group by sessionid  
  HAVING COUNT(DISTINCT s1.event) = 2
) s2 ;
+-------------------------+-----------+-------+------+
| time                    | sessionid | event | val  |
+-------------------------+-----------+-------+------+
| 2019-07-24 15:52:24.671 | 1         | start |    5 |
| 2019-07-24 15:52:44.671 | 4         | start |    5 |
+-------------------------+-----------+-------+------+

第二个问题是,我想按照说明的规则组合一个SQL查询来计算值的总和。是否可以将两个SQL结合在一起?

雷纳特

stop 起止对的事件

select *
from session_values
where sessionid in (
                    select sessionId 
                    from session_values
                    where event in ('start','stop')
                    group by sessionid  
                    HAVING COUNT(1)=2
                  )
    and event='stop'

和总和:

select sum(val)
from session_values
where sessionid in (
                    select sessionId 
                    from session_values
                    where event in ('start','stop')
                    group by sessionid  
                    HAVING COUNT(1)=2
                  )
    and event='stop'
 or sessionid in (
                    select sessionId 
                    from session_values
                    where event in ('start','stop')
                    group by sessionid  
                    HAVING COUNT(1)=1
                  )
    and event='start'

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

当BCD映射规则处于活动状态时,在INSERT查询中强制转换参数值会产生算术溢出

当render()处于活动状态时,计算机冻结

当Hibernate查询缓存处于活动状态时,Wildfly无法启动

填写输入字段时,如何使按钮状态处于活动状态?

当多个文件处于活动状态时,Filereader会被覆盖

仅在诺言处于活动状态时如何显示和隐藏弹出窗口?反应

在CBPeripheralManager处于活动状态时如何提高CBCentralManager的性能

当项目处于非活动状态时,如何找到替换叉?

蓝牙处于活动状态时如何暂停/睡眠?

如何在通话仍处于活动状态时隐藏拨号意图

在blockUI处于活动状态时如何禁用p:defaultCommand?

搜索处于活动状态时如何更改statusBar背景颜色?

某个班级处于活动状态时如何隐藏班级?

节点处于活动状态时如何停止隐藏?

当图标仅处于活动状态时如何更改图标?

当 EditText 处于非活动状态时如何设置提示位置

键盘处于活动状态时如何使布局可滚动?

当某个元素处于“活动状态”时如何设置文本颜色

当我不在计算机上处于活动状态时,如何使用守护程序启动matlab?

当多个配置文件处于非活动状态时,如何有条件地声明Bean?

Get-AzureWebsite cmdlet不返回任何实例,但我的网站处于活动状态。如何查询和更新?

Virtualbox:计算VM处于活动状态的时间

在ListView中处于活动状态或非活动状态时,如何更改容器的颜色

如果使用JQuery和Ajax使数据处于活动状态或不活动状态,如何使dataTable排序?

有多个 mobx 实例处于活动状态

当进度对话框和后台线程处于活动状态时,如何处理屏幕方向变化?

查找标记处于活动状态时的间隔

SearchBar处于活动状态时移动

在函数处于活动状态时终止脚本