【问题标题】:Summing values for an overview汇总值的概览
【发布时间】:2009-05-15 22:40:52
【问题描述】:

我想获得用于案例的时间,以便创建概览。

案例的 SELECT 查询如下所示:

SELECT bc.id, bc.title, bc.estimateCurrent FROM cases bc 

对于一种情况,我可以像这样获得使用时间:

SELECT SUM(TIME_TO_SEC(TIMEDIFF(dateEnding, dateBeginning))) AS calculatedTime FROM timesheet WHERE `#case` = ?

如何将两者连接起来,以便为概览 SELECT 查询提供一个值?基本上我希望表格看起来像这样:

id|title|estimateCurrent|timeusedinsec 1|案例1| 20| 2000 2|案例2| 40| 2500 3|案例3| 70| 0

这可能吗?我不想在 php 端对每个查询都有一个,这会导致多个查询。视图会有帮助吗?

【问题讨论】:

  • 您调用了专栏#case?只是感觉很恶心......
  • 它击败了一个名为 '#' 的列;)
  • # 是外键,这样可以快速识别密钥我喜欢这样可能是一件愚蠢的事情:(
  • 一个“_id”后缀会更传统,并且可以避免你必须引用列名。
  • 嗯,有趣,我会建议这个谢谢

标签: sql mysql


【解决方案1】:

假设时间表列 #case 引用 bc.id,您可以使用这样的连接:

SELECT 
    bc.id, bc.title, bc.estimateCurrent,
    SUM(TIME_TO_SEC(TIMEDIFF(dateEnding, dateBeginning)))
FROM cases bc
JOIN timesheet ts on ts.`#case` = bc.id
GROUP BY bc.id, bc.title, bc.estimateCurrent

GROUP BY 定义了 SUM() 的工作方式。在这里,它将使 SUM() 将具有相同#case 编号的所有行相加。

【讨论】:

  • 太棒了,我试图弄清楚这一点非常糟糕:D
  • 您可能需要考虑此处的连接类型,因为自然连接将看不到尚未有人处理的情况。
  • 包含不同事物的 GROUP BY 真的很重要吗? GROUP BY bc.id 就够了吗?
  • 是的,GROUP BY 子句必须命名所有非聚合或常量的列
  • LEFT JOIN 与 JOIN 相同,默认为 LEFT。最佳做法是在 GROUP BY 子句中指定每个非聚合列。但 MySQL 是少数不强制执行此操作的数据库之一,因此 GROUP BY bc.id 就足够了。
猜你喜欢
  • 2021-08-20
  • 1970-01-01
  • 2016-04-16
  • 2014-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
相关资源
最近更新 更多