Syntax
MariaDB 10.2:為什麼 Count() 有效,但 Count(t.) 無效
我有一個表格,其中包含我從幾個供應商提供的每日報告中導入的交易詳細資訊。我想確保在執行此過程時不會跳過任何文件(每天一個文件)。
所以我想查詢數據庫以查找它在結果集中找到的不同日期的數量。
起初我試圖執行:
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 版本,則最後一條語句會成功執行,而不是產生錯誤)。