【问题标题】:I want to use result of a query in sql but it has some repetitive value, I want its distinct values我想在 sql 中使用查询的结果,但它有一些重复的值,我想要它的不同值
【发布时间】:2018-02-04 03:08:32
【问题描述】:

我的查询是

SELECT 
    [date], [Id], COUNT(*) AS cc
FROM 
    BestReviews
WHERE
    customer = 'ATVPDKIKX0DER'
GROUP BY
    [id], [date]
HAVING 
    COUNT(Id) > 50 
ORDER BY
    cc DESC

它返回如下结果:

1999-3-22   534215  64
1999-3-22   220009  64
1998-11-18  139545  58
1998-11-18  314112  58
1998-11-18  427338  58
1999-11-16  75564   55
1999-11-16  279232  55

我只想要这个查询的 3 个不同日期。前任。 1999-3-22 和 1998-11-18 和 1999-11-16。有序的后代

谁能帮帮我?

【问题讨论】:

  • 同一日期的不同ids有asme计数是可疑的。

标签: sql sql-server


【解决方案1】:

目前还不清楚为什么不同的 id 会得到相同的计数。

但是,您的问题的答案似乎是从selectgroup by 中删除id

SELECT [date], count(*) as cc
FROM BestReviews
WHERE customer = 'ATVPDKIKX0DER'
GROPU BY [date]
HAVING count(*) > 50 
ORDER BY cc DESC;

【讨论】:

  • 但是如果我删除 Id 它就不能正常工作。因为 ID 计数在组中很重要,而不是日期计数。
【解决方案2】:
    SELECT  date ,
            id ,
            cc
    FROM    ( SELECT    * ,
                        ROW_NUMBER() OVER ( PARTITION BY date ORDER BY id ) ctr
              FROM      ( SELECT    [date] ,
                                    [Id] ,
                                    COUNT(*) AS cc
                          FROM      BestReviews
                          WHERE     customer = 'ATVPDKIKX0DER'
                          GROUP BY  [id] ,
                                    [date]
                          HAVING    COUNT(Id) > 50
                        ) Main
            ) T
    WHERE   ctr = 1
    ORDER BY cc DESC

【讨论】:

  • 非常感谢。它有效,给了我我想要的。
  • 欢迎您! :) 只是想重申@Gordon Linoff 的建议是正确的,如果你从 group by 中删除 id 并选择,你会得到多个结果,因为它的 id 不同,它会给你相同的期望结果。但是,如果您想保留 id.. 只需从 group by 中删除 id 并从 select 中放入 max(id),尽管我在上面以子查询的形式回答.. 背后的原因是保留您的查询结果.
猜你喜欢
  • 2016-10-04
  • 1970-01-01
  • 2019-12-06
  • 2012-05-26
  • 2021-04-08
  • 1970-01-01
  • 2015-03-16
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多