使用COUNT命令的SQL差异

时间:2016-11-13 19:47:10

标签: mysql sql

我正在尝试使用SQL执行我的第一步。目前我正在尝试分析数据库并解决了我无法解释的问题。最终有人可以给我一个提示。

我有一个mySQL表('cap851312')女巫有330.178表行。我已将表格导入Excel,并验证了这个数字!

每一行都包含条目日期的字段(列'ID_MES_ANO')。目前,所有日期都是唯一设置的"201312"

启动以下命令,我希望看到给定的行数,但出现的数字是476.598。

SELECT movedb.cap851312.ID_MES_ANO, count(*)
   FROM movedb.cap851312;

我已将文件导入Excel,并验证了行数。实际上,它是330.178!

我怎么能知道,到底出了什么问题?

更新

我试过了:

SELECT count(*) FROM movedb.cap851312

这也返回476.598。

当我使用工作台时,我很容易确认330.178表行的数量。

更新2:

Workbench Table Inspector确认:“表行:330178”

解决了 - 但不确定原因:

我将语句改为

SELECT count(ID_MES_ANO) FROM movedb.cap851512;

这次结果是330178!

1 个答案:

答案 0 :(得分:0)

COUNT(*)统计所有行。

COUNT(ID_MES_ANO)仅计算ID_MES_ANO不为空的行。

因此两者之间的差异是ID_MES_ANO为空的行。

您可以使用

进行验证
SELECT count(*) FROM movedb.cap851512 WHERE ID_MES_ANO IS NULL;

顺便说一下:

SELECT movedb.cap851312.ID_MES_ANO, count(*) FROM movedb.cap851312;

表示:将所有行聚合到一个结果行(通过使用不带COUNT的聚合函数GROUP BY)。此结果行显示ID_MES_ANO和所有记录的数量。标准SQL不允许这样做,因为您没有告诉DBMS显示那些成千上万条记录中的哪些ID_MES_ANO。 MySQL在这里违反了标准,只是从行中任意挑选一个ID_MES_ANO