【问题标题】:Counting how many times each unique element appeared in `select` query计算每个唯一元素在“选择”查询中出现的次数
【发布时间】:2014-04-25 05:32:25
【问题描述】:

我有一个包含数百万条记录的 MySQL 数据库,表的索引很好。下面是表结构。

我在表格中运行了以下代码。

SELECT `iwebs` FROM `wordstable` WHERE `iwebs` LIKE 'a1' or `iwebs` LIKE 'a2' or `iwebs` LIKE 'a3' or `iwebs` LIKE 'a4' or `iwebs` LIKE 'a5' or `iwebs` LIKE 'a6' or `iwebs` LIKE 'a7' or `iwebs` LIKE 'a8' or `iwebs` LIKE 'a9' or `iwebs` LIKE 'a10' 

现在这段代码生成了下面的输出(显示了一小部分输出)。

但是,这不是我需要的。我需要的是一个键值对,它显示每个元素在结果中出现的次数。类似的东西

[a1,400]
[a2,100]
[a3,5]
[a5,500]
........

在上面的示例中,每个括号中的第一项表示单个元素出现在select 查询中,第二项表示它出现的次数。

换句话说,它表示“a1 在 select 查询中出现 400 次”、“a2 在 select 查询中出现 100 次”、“a3 在 select 查询中出现 5 次”和“a5 在 select 查询中出现 500 次”等等开。

如何在 SQL 中执行此操作?

【问题讨论】:

  • 这是一个简单的计数/分组方式
  • @paqogomez:不,正常计数和 groupby 将返回每个元素在“表”中出现的次数。但是看看我的查询,我正在使用 like 关键字寻找一组“项目”,我只需要知道它们在“搜索”中出现了多少次。

标签: mysql sql select count


【解决方案1】:

试试这个:

SELECT iwebs , COUNT(iwebs) FROM wordstable GROUP BY iwebs

针对特定要求进行编辑

SELECT iwebs , COUNT(iwebs) FROM wordstable  WHERE `iwebs` IN 

('a1','a2','a3','a4','a5','a6','a7','a8' ,'a9' ,'a10') 按 iweb 分组

【讨论】:

  • 不,这不是我需要的。这返回了“表”中的所有计数。但是看看我的查询,我在寻找一组值,我只需要知道它们出现了多少次,而不是整个一次。
  • 检查我在其中添加 WHERE 子句的编辑,或者您可以在第一个查询中放入与您的问题相同的 WHERE 条件
  • 我做到了。它生成了一个错误You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE iwebs` IN ('a1','a2','a3','a4','a5','a6','a7','a8' ,'a9' ,'a10' )`
【解决方案2】:

稍加思考,您应该能够将@Ilesh 的解决方案与您的请求相结合:

SELECT iwebs, COUNT(iwebs) FROM wordstable WHERE iwebs IN ('a1','a2','a3','a4') GROUP BY iwebs

【讨论】:

  • 如果你想得到excatly你的输出,试试 SELECT CAST(CONCAT('[',iwebs,',',COUNT(iwebs),']') AS CHAR(64) AS count FROM wordtable WHERE iwebs IN ('a1','a2','a3','a4') GROUP BY iwebs
  • 是的,您的代码有效。但是,您在评论中所说的“正是您的输出”是什么意思?
  • 好吧,你写了你想要一个像 [a1,100] [a2,29] 这样的输出......这就是 concat 为你做的......用你的将两个结果列重新格式化为一个方括号
  • 啊诺诺。我不需要括号。我用括号显示“一行”
猜你喜欢
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
相关资源
最近更新 更多