mysql - SQL:计算一个表的某个字段到同表的另一个字段的重复次数

标签 mysql sql

我有这样的表:

| ID | REAGENT |
|----|---------|
|  1 |       0 |
|  2 |       0 |
|  3 |       1 |
|  4 |       2 |
|  5 |       2 |
|  6 |       1 |
|  7 |       3 |
|  8 |       1 |
|  9 |       4 |
| 10 |       3 |
| 11 |       6 |
| 12 |       4 |
| 13 |       1 |
| 14 |       0 |
| 15 |       0 |
| 16 |       2 |
| 17 |      11 |
| 18 |      23 |
| 19 |      11 |
| 20 |       7 |
| 21 |       6 |
| 22 |      10 |
| 23 |       1 |
| 24 |      11 |
| 25 |      15 |
| 26 |       4 |

并且我使用此查询来计算同一表中“试剂”字段中每个“ID”字段的重复次数

  SELECT 
   b.ID,(SELECT count(a.reagent)FROM mytb AS a WHERE a.reagent=b.ID ) AS reagentCount 
FROM mytb AS b

| ID | REAGENTCOUNT |
|----|--------------|
|  1 |            5 |
|  2 |            3 |
|  3 |            2 |
|  4 |            3 |
|  5 |            0 |
|  6 |            2 |
|  7 |            1 |
|  8 |            0 |
|  9 |            0 |
| 10 |            1 |
| 11 |            3 |
| 12 |            0 |
| 13 |            0 |
| 14 |            0 |
| 15 |            1 |
| 16 |            0 |
| 17 |            0 |
| 18 |            0 |
| 19 |            0 |
| 20 |            0 |
| 21 |            0 |
| 22 |            0 |
| 23 |            1 |
| 24 |            0 |
| 25 |            0 |
| 26 |            0 |

这个查询有一个正确的响应但是太慢了!

我想知道是否有更快的计算方法? 感谢您的指导。

最佳答案

您的查询看起来还不错。我认为您的问题是缺少适当的索引。

如果您只是在 reagent 列上添加索引,它应该工作得更快:

CREATE INDEX mytb_reagent_ix ON mytb(reagent);

确认您的查询是否快速执行的最简单方法是使用 EXPLAIN statement 查看执行计划并确保主键或辅助键用于所有查询步骤 - 我在这个 SQLFiddle Demo 中为您完成了.

关于mysql - SQL:计算一个表的某个字段到同表的另一个字段的重复次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19895766/

相关文章:

使用其他字段值的MySQL查询结果

mysql - 为什么 mysqlbinlog 实用程序显示两个值而不是一个?

php - 关键字 GO 在 PHP 中抛出错误

sql - postgresql分区主表重复条目

sql - 选择两列中两个日期之间的记录

javascript - 将数字签名上传到文件夹并提交到数据库

php - 在php中传递变量sql查询

MYSQL 使用 AS 列名过滤

sql - 如何从 Oracle 中的链表中获取第一个元素?

mysql - SQL CONCAT 列并在每个非空条目后添加返回