【问题标题】:SQL GROUP BY - Check if column with different values has certain valueSQL GROUP BY - 检查具有不同值的列是否具有特定值
【发布时间】:2022-01-04 12:57:17
【问题描述】:

我是使用 SQL 的新手,不知道如何解决以下问题:

想象一下我得到了这张桌子

User_ID | Operating System | LastSeen (containing some timestamps)
1       |  IOS             | hh:mm:ss   
1       |  AOS             | hh:mm:ss
1       |  Unknown         | hh:mm:ss
2       |  IOS             | hh:mm:ss
2       |  Unkown          | hh:mm:ss
3       |  AOS             | hh:mm:ss

用户 ID 与操作系统结合可以是主键,并且在每一行中都是唯一的

我想获得一个用户表(因此我想通过 User_ID 使用组)为我提供最新的 LastSeen 值(使用 Max(LastSeen))以及用于 usesAndroid 和 usesIOS 的布尔值。

所以结果应该是这样的

User ID | Using_IOS | USING_AOS | LastSeen containing Max(LastSeen)
1       | True      | True      | hh:mm:ss
2       | True      | False     | hh:mm:ss
3       | False     | True      | hh:mm:ss

关于 Using_IOS/Using_AOS 列,我不知道如何将它们放在一个组中,我可以在 GroupBy 中使用 sth 之类的 contains 或函数中包含多个不同值的列吗?

提前致谢!

【问题讨论】:

  • 同一个用户ID有IOS和AOS是什么意思,按UserID分组的时候怎么看?请包括所需的结果!
  • 是的,很遗憾我在正确表达我的问题方面不是最好的,编辑是否回答了您的问题? :'D
  • 如sql标签的描述中所示,请TAG您的RDBMS

标签: sql group-by boolean aggregation contains


【解决方案1】:

您可以根据用户 ID 分组并使用sum:

select user_id, sum(OperatingSystem = "IOS") > 0, sum(OperatingSystem = "AOS") > 0, max(LastSeen)
from test group by user_id

【讨论】:

    猜你喜欢
    • 2021-03-15
    • 2018-12-22
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-30
    相关资源
    最近更新 更多