【问题标题】:MIN and MAX for certain rows某些行的 MIN 和 MAX
【发布时间】:2018-10-25 19:46:59
【问题描述】:

我有一个如下所示的数据集 (myDataset.csv)

User      Value
Alice     2
Alice     4
Alice     3
Bob       9
Bob       7
Bob       8

...对于许多其他用户/值等等

我想找到每个用户的最小值和最大值,但我正在努力通过 SQL 查询来做到这一点。

我分解了这个问题并为一个用户(比如 Alice)查询了所有行以获取 AliceDataset.csv,然后运行此查询以找到她的最小值和最大值。所以我知道如何得到最小值和最大值。

SELECT MIN(AliceDataset.value), MAX(AliceDataset.value)
FROM AliceDataset

但是我怎样才能遍历 all 用户 myDataset.csv 并为他们每个人找到他们的最小值和最大值(甚至可能使用此查询中的代码)以上)

【问题讨论】:

  • 您使用的是哪个DBMS 产品? “SQL”只是一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tag postgresql, oracle, sql-server, db2, ...
  • @a_horse_with_no_name 我正在使用具有 SQL 查询工具的 data.world。我试着调查一下它刚才使用的是哪个 DBMS,但我不太确定如何去寻找它

标签: sql


【解决方案1】:

使用 max()min() 函数,你必须使用 group by 来获取每个用户的最大值和最小值

select User , max(Value) mx_val,min(Value) min_val
from your_table
group by  User 

【讨论】:

    【解决方案2】:

    使用分组和聚合 - 这将为您提供用户明智的最小值和最大值

    SELECT user, MIN(Value) as minval, MAX( Value) as maxval
    FROM AliceDataset
    group by user
    

    【讨论】:

      【解决方案3】:

      聚合函数主要用于返回单个值。如果您想select 任何具有聚合函数的列,您需要添加 group by 子句,该列名称要添加到 select 结果中。

      因此,在您的情况下,您希望在结果中对 value 使用聚合函数,并且还希望使用 User 显示值函数结果,因此您需要使用 User 添加子句 group by。

      所以查询将是:

      select User,
             max(Value) as "Maximum Value",
             min(Value) as "Minimum Value"
      from AliceDataset
      group by User
      

      注意:
      如果你想在使用聚合函数时添加条件,你需要使用having而不是where
      例如:

      select User,
             max(Value) as "Maximum Value",
             min(Value) as "Minimum Value"
      from AliceDataset
      group by User
      having max(Value) > 3
      

      【讨论】:

        猜你喜欢
        • 2017-09-09
        • 1970-01-01
        • 1970-01-01
        • 2018-05-16
        • 2023-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多