我有一个表格,其中包含我从几个供应商提供的每日报告中导入的交易详细信息。我想确保在执行此过程时不会跳过任何文件(每天一个文件)。
所以我想查询数据库以查找它在结果集中找到的不同日期的数量。
起初我试图执行:
SELECT COUNT(t.*) FROM (SELECT DISTINCT `Date of Survey` from cc.voc_detail_old) t;
但这会产生错误“* SQL Error (1064): You have an error in your SQL syntax;...”
更改它以SELECT Count(*)...
解决错误和查询功能如预期。为什么不允许在Count()
函数中使用派生表的别名,但每个语法都需要派生表的别名?
在 MariaDB 中,
COUNT()
函数需要一个表达式(也就是说,单个值)。对于表达式不为 NULL 的每一行,将计算该行。使用DISTINCT
,正如您所注意到的,它只会将每个不同的非 NULL 值计算一次。COUNT(*)
是一种特殊情况,返回结果集中的行数。COUNT(t.*)
仅当 table 中只有一列时才有效t
。根据 OP 的测试和我自己的测试,即使表格只有一列也
COUNT(t.*)
不起作用。请参阅此 dbfiddle.uk 链接以自行确认。(注意:您还可以看到其他一些 SQL 版本可以处理此问题;如果将 DB 引擎切换到 Postgres 版本,则最后一条语句会成功运行,而不是产生错误)。