【问题标题】:What is wrong with my SQL count query?我的 SQL 计数查询有什么问题?
【发布时间】:2016-11-11 17:41:11
【问题描述】:

我有一张包含我所有库存 ID 的表格,它们都重复了。所以我在看这样一张桌子:

   ItemID   |   Price 
   1        |   5.50 
   1        |   5.50 
   2        |   6.50
   2        |   6.50

等等..

现在,当我运行这样的查询时:

SELECT ItemID, COUNT(*) AS count
FROM Inventory
GROUP BY ItemID

我得到以下结果:

   ItemID   |   count  
   1        |   1 
   1        |   1  
   2        |   1 
   2        |   1

为什么它明明是 2 却给了我 1?

编辑:正如大多数人指出的那样,这是由于 ItemID 中的一个额外字符。其中一个重复项有一个换行符。它是如何到达那里的,我不确定。不过谢谢你的帮助。

【问题讨论】:

  • ItemID 列是哪种数据类型?
  • 我无法复制这个结果
  • 这是您按预期工作的相同代码。可能 ItemID 是一个带有空格或什么的字符串? sqlfiddle.com/#!9/03df5/1
  • 试试SELECT LTRIM(RTRIM(ItemID)) AS id, COUNT(*) as count FROM Inventory GROUP BY LTRIM(RTRIM(ItemID))
  • 那么您在 itemID 字段中隐藏了字符 .. 尝试使用 trim(itemID) 删除

标签: mysql sql count


【解决方案1】:

如果ItemId 总是看起来像一个数字,那么你将它转换为一个数字:

SELECT ItemID + 0, COUNT(*) AS count
FROM Inventory
GROUP BY ItemID + 0;

但是,根本问题是您似乎在ItemId 中有您不期望的字符。这些可能就像字符串末尾的空格一样简单,也可能是另一种隐藏字符。

【讨论】:

    【解决方案2】:

    有很多方法,比如 add coloum_name+0 和 trim(coloum_name) 但你应该 将您的表 ItemID 更改为 int 或使用 trim 更新您的表数据

    【讨论】:

      【解决方案3】:

      尝试使用

      删除隐藏的字符
      SELECT trim(ItemID), COUNT(*) AS count
      FROM Inventory
      GROUP BY trim(ItemID)
      

      【讨论】:

        【解决方案4】:

        SELECT itemId,count(count) as have_this_many
        从库存 WHERE (SELECT DISTINCT(itemId) = itemId) 按项目 ID 分组 按 itemId 排序

        我不确定字段名称等于 SQL 函数会产生什么影响,但我会将其命名为“on_hand”之类的名称。

        【讨论】:

          猜你喜欢
          • 2010-12-23
          • 2016-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-08-11
          相关资源
          最近更新 更多