【问题标题】:postgreSQL - Sum hours by unique ID and morepostgreSQL - 按唯一 ID 计算小时数等
【发布时间】:2018-09-04 16:02:34
【问题描述】:

我试图弄清楚如何通过唯一 ID 求和时间(意味着每个 ID 只有一个)。这是一些数据的标记。我需要按 f_name、l_name 和区域分组。我还需要组计数(唯一的 id 计数)和组参与者(只是简单的 id 计数)。

+----+------+--------+------+------+--+ |身份证 |时间 |名称 |姓名 |面积 | | +----+------+--------+------+------+--+ | 1 | 3:30 |杰夫 |选择 |洛杉矶 | | | 1 | 3:30 |杰夫 |选择 |洛杉矶 | | | 1 | 3:30 |杰夫 |选择 |洛杉矶 | | | 2 | 4:00 |杰夫 |选择 |洛杉矶 | | +----+------+--------+------+------+--+

数据应如下所示:

+------+-------+--------+------+-------------+-- ---------------+ |时间 |名称 |南 |面积 |组数 |团体参与者 | +------+-------+--------+------+-------------+-- ---------------+ | 7:30 |杰夫 |选择 |洛杉矶 | 2 | 4 | | | | | | | | +------+-------+--------+------+-------------+-- ---------------+

奖励:如果您可以将 3:30 转换为 3.5

【问题讨论】:

  • 我在您的结果中没有看到任何 SUM。你试过什么?

标签: postgresql


【解决方案1】:

SQL DEMO

WITH cte as (
    SELECT fname, lname, Area,
           COUNT(DISTINCT id) as "Group Count",
           COUNT(id) as "Group Participants", 
           SUM(DISTINCT "time"::time) as "Time"
    FROM Table1
    GROUP BY fname, lname, Area, id 
)    
SELECT fname, lname, Area,
       SUM("Group Count") as "Group Count",
       SUM("Group Participants") as "Group Participants", 
       SUM("Time"::time) as "Time"
FROM cte
GROUP BY fname, lname, Area;

输出

【讨论】:

  • 我知道我应该添加更多行。我需要为所有人总结所有时间。我将编辑问题并重新发布。谢谢。
  • 问题是聚合时间非常复杂。你可以在这里查看stackoverflow.com/questions/13008674/…
  • 好的。我可以做转换部分。我只需要有关按 fname、lname 和 area 分组的组数和组参与者的聚合时间方面的帮助。
  • 差不多。这样做的问题是,由于时间不同,时间正在增加。如果 id 1 和 id 2 具有相同的时间值,则不会相加。我在小提琴中尝试过。有什么想法吗?
  • 我不明白你的意思。您能否用一些数据更新小提琴并解释为什么您认为它是错误的结果以及您的预期结果是什么?
猜你喜欢
  • 2011-03-29
  • 2011-03-17
  • 1970-01-01
  • 2014-12-24
  • 2014-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多