【问题标题】:Select and manipulate SQL data, DISTINCT and SUM?选择和操作 SQL 数据、DISTINCT 和 SUM?
【发布时间】:2016-06-03 18:02:12
【问题描述】:

我正在尝试为自己制作一份小报告,以了解我每天在系统中输入了多少时间。

目标是让我的 SQL 总结某一天的名称、总工作时间和找到的总 NG 产品。

按此顺序:

1.) 为特定的“日期”整理我的数据。即2016-06-03

2.) 为 'operators' 提供一个 DISTINCT 值

3.) SUM() 在这个“日期”和这个“操作员”在“total_working_time_h”下注册的所有时间

4.) SUM() 在此“日期”和该“操作员”在“no_of_defects”下注册的所有 no_of_defects

日期、操作员、total_working_time_h、no_of_defects

目前我通过使用下面的查询获得了我想要的数据。但现在我需要运算符的 DISTINCT 值和信息的 SUM。我可以为此使用子查询还是应该通过循环来完成?还有其他提示可以让我了解有关如何解决此问题的更多信息吗?

如果我运行 DISTINCT 函数,我就没有机会按照我尝试的方式汇总我的数据。

    SELECT date,    operator,   total_working_time_h,   no_of_defects FROM {$table_work_hours} WHERE date = '2016-06-03' "

【问题讨论】:

    标签: sql sorting sum distinct summarization


    【解决方案1】:

    在不知道表结构或内容的情况下,下面的查询只是一个很好的猜测。需要注意和使用的位是sum()GROUP BY。实际上语法会有所不同,具体取决于您使用的 RDBMS。

    SELECT
       date
      ,operator
      ,SUM(total_working_time_h)  AS total_working_time_h
      ,SUM(no_of_defects)         AS no_of_defects
     FROM {$table_work_hours}
     WHERE date = '2016-06-03'
     GROUP BY
       date
      ,operator
    

    (取出WHERE 子句或将其替换为一系列日期,以获得每个操作员每个日期的结果。)

    【讨论】:

    • 你完全掌握了我的结构,甚至不需要调整代码。这个看起来完全解决了我的问题。非常感谢。将尝试理解为什么我不需要 DISTINCT 你。我并没有真正理解我们如何确保它只整理出与操作员相关的信息。
    • 阅读几篇关于select 语句的group by 子句的内容、原因以及如何使用的文章。这是一个漫长而复杂的主题,而且非常有用。
    • 我会的,有什么建议可以推荐一个适合初学者阅读的优质场所吗? Ofc 我可以用谷歌搜索,但总能找到一些关于资源的方向更好,因为我真的没有技能来决定什么是好的,而不是在这个领域。
    • SQLServerCentral 有许多不错的系列文章,包括“T-SQL DML 的阶梯”。系列中的第七篇讨论 GROUP BY:sqlservercentral.com/articles/Stairway+Series/75779
    • 非常感谢您的链接。
    【解决方案2】:

    我不确定您为什么要尝试 DISTINCT。您想知道特定日期的数据、小时数等。

    这样做....

    Select Date, Operator, 'SumWorkHrs'=sum(total_working_time_h),
      'SumDefects'=sum(no_ofDefects) from {$table_work_hours} 
           Where date='2016-06-03' 
    

    【讨论】:

    • 现在试试这个,但看起来它会将整个 SUM 显示为一个金额。试图附加一些示例数据,但无法在此处将其格式化为表格。它只是变成了一堵文字墙。我希望数据类似于“日期”(一个选定的日期)、“操作员”(一个在此特定日期工作的操作员,只显示一次。)、“SumOfHours”(在该名称上记录的所有小时数的总和)那天。),“SumDefects”(同一操作员在同一日期记录的所有缺陷的总和)。
    • Give you 1 让我提前了解我需要使用与您刚才介绍的类似代码来解决的其他问题。
    • @JohannesLöfgren DISTINCT 删除重复项。在这种情况下,我认为您不需要它。我不会做很多 SQL,但我很少使用它。
    • 我知道这是删除重复项。所以在我可能 DISTINCT 也会删除我的数据?那是对的吗?我想我可以用 to 来避免在我的情况下名称的双重数据,但仍然从该行获取数据。
    • 嗯,这很难说,因为我没有看到你的数据 - 但就像我说的,只有在某些情况下你会使用它。我认为您的数据集不适合 Distinct。
    【解决方案3】:

    试试这个:

    SELECT SUM(total_working_time) as total_working_time, 
    SUM(no_of_defects) as no_of_defects , 
    DISTINCT(operator) AS operator FROM {$table_work_hours} WHERE
    date = '2016-06-03'
    

    【讨论】:

    • 如果这不起作用,你将不得不在同一张表上做一些内连接/左连接
    • 我没有工作。而且我没有花任何时间来操纵这条线,因为我让它在上面工作。还是谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多