Syntax

MariaDB 10.2:為什麼 Count() 有效,但 Count(t.) 無效

  • March 2, 2018

我有一個表格,其中包含我從幾個供應商提供的每日報告中導入的交易詳細資訊。我想確保在執行此過程時不會跳過任何文件(每天一個文件)。

所以我想查詢數據庫以查找它在結果集中找到的不同日期的數量。

起初我試圖執行:

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 版本,則最後一條語句會成功執行,而不是產生錯誤)。

引用自:https://dba.stackexchange.com/questions/199170