【问题标题】:wrong count in query查询计数错误
【发布时间】:2011-03-15 16:44:50
【问题描述】:

我有一张表,其结构如下:

id  int
userid  int
status  enum ('pending','approved')
dop     datetime

数据如下:

id          userid               status             dop
 1            24                 pending            2011-02-14 06:41:32
 2            24                 pending            2011-02-15 23:02:45

当我触发以下查询时:

SELECT count( userid )
FROM t1
WHERE STATUS = 'pending'
GROUP BY userid

它给我计数为'2',这是错误的,谁能告诉我这里有什么问题?以及如何将实际计数设为 1

【问题讨论】:

  • 您是否尝试将SELECT count() 换成SELECT *?这样,您将看到查询的结果,并且您可能会发现计数仍然为 2 的原因。
  • 这不是一个错误的结果,只要你有两行。 COUNT() 正在计算行数
  • @ggregoire:为什么这是错的......不是为什么这是错的。
  • @markus : 抱歉我不会说英语。
  • distinct without with group by 如下所示

标签: mysql


【解决方案1】:

group by 语句在计数之后执行。改用这个:

SELECT count( DISTINCT userid )
FROM t1
WHERE STATUS = 'pending'

【讨论】:

    【解决方案2】:

    您要统计当时状态为待处理的用户数吗?

    SELECT count(userid)
    FROM t1
    WHERE STATUS = 'pending'
    GROUP BY status, userid
    

    【讨论】:

    • 它仍然没有让我正确计数
    【解决方案3】:

    尝试在 select 子句中添加用户标识:

    SELECT userid, count( userid )
    FROM t1
    WHERE STATUS = 'pending'
    GROUP BY userid
    

    【讨论】:

      【解决方案4】:

      也许在用户 ID 上添加 DISTINCT()?

      【讨论】:

        【解决方案5】:
        SELECT count( DISTINCT userid )
        FROM t1
        WHERE STATUS = 'pending'
        GROUP BY userid
        

        【讨论】:

          【解决方案6】:

          您应该使用 COUNT(DISTINCT()) 构造,它允许您计算不为 NULL 的不同值 (docu)

          试试这句话:

          SELECT count( DISTINCT( userid ) )
          FROM t1
          WHERE STATUS = 'pending'
          GROUP BY userid
          

          HTH!

          【讨论】:

            猜你喜欢
            • 2017-04-07
            • 1970-01-01
            • 2015-04-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多