【问题标题】:max(sum(field query in Hive/SQLmax(sum(Hive/SQL 中的字段查询
【发布时间】:2017-06-02 07:05:13
【问题描述】:

我有一张表,其中包含一个月内用户的大量交易。

我需要从每天 Sum(cost) 最高的那个小时开始。

我尝试了 MAX(SUM(Cost)),但出现错误。

请问我该怎么做?

这里是一些示例数据

+-------------+------+----------+------+
|   user id   | hour |   date   | Cost |
+-------------+------+----------+------+
|      343252 |   13 | 20170101 | 21.5 |
|    32532532 |   13 | 20170101 | 22.5 |
|    35325325 |   13 | 20170101 | 30.5 |
|   325325325 |   13 | 20170101 | 10   |
|    64643643 |   12 | 20170101 | 22   |
|   643643643 |   12 | 20170101 | 31   |
|   436325234 |   13 | 20170101 | 15   |
|   213213213 |   13 | 20170101 | 12   |
| 53265436436 |   17 | 20170101 | 19   |
+-------------+------+----------+------+

预期输出:

我每天只需要一行,它显示“最昂贵”小时的总成本。在本例中,13:00 的总成本为 111.5

【问题讨论】:

  • 提供包含所需结果的数据样本
  • 感谢您的回复 - 我已添加该信息 :)
  • (1) 更好,但请将其添加为文本以便复制。 (2) 遇到工时平局的情况,你想怎么办?
  • 我已经复制并粘贴为文本 - 但我没有看到将其添加为表格的方法,因此它的可读性不强 - 如果您知道如何将其制作为表格很棒。就小时之间的联系而言,这极不可能发生。但是,如果确实如此,我不太担心会打印哪一个

标签: sql hive hiveql


【解决方案1】:
select      hr
           ,dt
           ,total_cost

from       (select      dt
                       ,hr
                       ,sum(cost)   as total_cost
                       ,row_number () over
                        (
                            partition by    dt
                            order by        sum(cost) desc
                        ) as rn

            from        mytable
            group by    dt,hr
            ) t

where       rn = 1

+----+------------+------------+
| hr |     dt     | total_cost |
+----+------------+------------+
| 13 | 2017-01-01 | 111.5      |
+----+------------+------------+

【讨论】:

    【解决方案2】:

    试试这个:

    select AVG(hour) as 'Hour',date as 'Date',sum(cost) as 'TotalCost' from dbo.Table_3 group by date
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多