【问题标题】:Distinct Count Via SQLFiddle通过 SQLFiddle 进行不同计数
【发布时间】:2012-06-25 20:23:09
【问题描述】:

这看起来很奇怪:[SQL FIDDLE]

这两个用户肯定是不同的,即 12。那么为什么不同的计数是 1 呢?

【问题讨论】:

  • @Lamak...不错的一个;以为我要疯了!
  • 另外,我不知道这是否是一个学术练习,但我肯定会专注于使用适当的数据类型(日期时间)。
  • @swasheck ?!不是学术,希望生活是,我们有一个使用 DateKey INT 的 1000GB 仓库......它使用该类型为该键节省空间
  • @whytheq 你认为 INT 需要的存储空间比 DATE 少吗?
  • @CadeRoux 我很好奇为什么 INTSMALLDATETIME 更受欢迎,甚至在 SQL Server 2008 之前。相同的存储大小,但仍然允许所有日期/时间操作、自动验证等. 使用INT 键,您可以将20120230 推入其中,除非您有复杂的约束或触发器——而且您在SMALLDATETIME 列中没有获得任何超过2012-02-28 的东西!

标签: sql sql-server sqlfiddle


【解决方案1】:

你想使用distinct [User]

用户是一个特殊的词

http://sqlfiddle.com/#!3/b4130/20

【讨论】:

    【解决方案2】:

    user 是保留关键字。如果你运行:

    select DateKey, User from the_table
    

    您会看到该用户不是12,而是类似于user_b1234。就像 Lamak 建议的那样,使用 [user] 来引用列而不是系统变量。

    【讨论】:

    • 我猜date 是一个保留较少的关键字,但我仍然会将它包含在[] 中:)
    【解决方案3】:

    这是一个带有一些解释的答案......

    用户不仅仅是一个保留字。它更像是一个系统定义的只读全局变量。

    • 计算为当前数据库用户的名称。所以每一行都会得到相同的值,count(distinct user) 是 1。

    • 用户生成与系统定义的 USER_NAME() 函数相同的值。

    因此,如果您希望将 User 视为列名,请按照其他人的建议以及您在 create table 语句中所做的那样编写 [User]。

    【讨论】:

      【解决方案4】:

      我想你想要这个:

      select 
          COUNT(DateKey)
          ,count(distinct User) Cnt
      from the_table
      where Datekey = 20120103
      group by 
          DateKey
      

      http://sqlfiddle.com/#!3/b4130/14/0

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-08
        • 2019-04-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多