【问题标题】:SQL expression to remove duplicates from a calculation从计算中删除重复项的 SQL 表达式
【发布时间】:2010-09-16 08:17:54
【问题描述】:

我正在尝试运行一个可以提供时间平均值的查询,但是当我这样做时……计算中存在一些重复的记录。如何删除重复项?

例如

第 1 栏 / 07-5794 / 07-5794 / 07-5766 / 07-8423 / 07-4259

第 2 栏 / 00:59:59 / 00:48:22 / 00:42:48/ 00:51:47 / 00:52:12

我可以获得第 2 列的平均值,但我不希望第 1 列中的相同值被计算两次 (07-5794) ???

【问题讨论】:

  • 你能解释一下你想要做什么吗?您是否只是对第 2 列中的所有时间进行平均?第 1 列的目的是什么?
  • 您好,我是第 2 列中的平均次数,但需要第 1 列,因为这是根据数据库中的搜索条件提取数据的方式。
  • So far (SELECT distinct (Inc.INCNUM) FROM Inc where IncID = Inc.ID) Field SQL alias is "Inc.INCNUM" Table sql alias is "Inc" 问题是重复的剧照出现并且平均值仍在使用这条线。我是否可能必须在其中输入一些内容以用于计算?谢谢
  • 当有重复时,我们仍然需要从第 2 列中知道您想使用哪个时间。你想要最长的时间还是最短的时间?
  • 我仍然认为你必须分两部分进行......首先你必须为每个 incnum 获得最短的时间,然后你可以取所有这些的平均值......我'会相应地修改我的答案。

标签: sql


【解决方案1】:

要获得每个 incnum 的最小值的平均值,您可以编写此 SQL

select avg(min_time) as avg_time from
    (select incnum, min(col2) as min_time from inc group by incnum)

为您的 SQL 品牌使用正确的平均函数。

如果您在 Access 中执行此操作,您需要将其粘贴到 SQL 视图中;当您使用子查询时,您不能直接在设计视图中执行此操作。

【讨论】:

    【解决方案2】:

    选择 DISTINCT()

    按 () 分组

    选择唯一()

    ...但通常平均个重复。告诉我这不是财务软件,我不支持another abuse of statistics

    【讨论】:

    • 认为 'UNIQUE' 仅适用于 Oracle,但情况可能并非如此
    • nlucaroni 请放心,这不是为了财务...我只是这方面的新手,不知道该怎么做。
    【解决方案3】:
    【解决方案4】:

    您想消除所有重复的条目吗?也就是说,计算中不应包含“07-5794”的行。如果是这样的话,我认为这会起作用(至少在 Oracle 中):

    SELECT AVG(col2)
      FROM (
        SELECT col1, MAX(col2) AS col2
          FROM table
          GROUP BY col1
          HAVING COUNT(*) = 1
      )
    

    但是,如果要保留其中一个重复项,则需要指定如何选择要保留的那个。

    【讨论】:

      【解决方案5】:

      阿纳斯塔西娅,

      假设您计算了平均值和表中的唯一键,您可以执行以下操作来获取每个唯一 07-xxx 结果的最新时间发生:

      select Column1, Avg(Convert(decimal,Column2)) 
      from Table1
      where TableId in
      (
      select Max(TableId)
      from Table1
      group by Column1
      )
      group by column1
      

      这是假设 MS SQL 中的以下表结构:

      CREATE TABLE [dbo].[Table1] (
      [TableId] [int] IDENTITY (1, 1) NOT NULL ,
      [Column1] [varchar] (50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL ,
      [Column2] [int] NULL ) ON [PRIMARY]
      

      祝你好运!

      【讨论】:

        猜你喜欢
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多