Mysql
計運算元查詢中的行數
簡單:我想計運算元查詢的行數。請注意,狀態是主機是否線上。
錯誤的程式碼
SELECT COUNT(ip_address) FROM `ports` ( SELECT DISTINCT ip_address FROM `ports` WHERE status IS TRUE )
解釋
第一個查詢在單獨執行時返回:
SELECT DISTINCT ip_address FROM `ports` WHERE status IS TRUE
ip_address 192.168.1.1 192.168.1.2 192.168.1.248 192.168.1.251 192.168.1.254
自行執行的第二個查詢返回以下內容:
SELECT COUNT(ip_address) FROM `ports`
17
題
我想知道如何計算 5 個 IP 地址的列表。
我一直在網上尋找這個簡單問題的可能解決方案,只是感到沮喪,所以我想問問專家。
要回答您的直接問題,如何計運算元查詢的行數,語法如下:
SELECT COUNT(*) FROM (subquery) AS some_name;
子查詢應緊跟 FROM 關鍵字。(在 MySQL 中,還必須為這種子查詢(它實際上稱為派生表)分配名稱,這就是為什麼您可以看到
AS some_name
下面的內容。)按照您編寫它的方式,MySQL 將您的腳本解釋為兩個獨立的查詢,這就是你得到兩個結果集的原因。因此,由於您的子查詢是
SELECT DISTINCT ip_address FROM `ports` WHERE status IS TRUE
完整的查詢如下所示:
SELECT COUNT(*) FROM ( SELECT DISTINCT ip_address FROM `ports` WHERE status IS TRUE ) AS derived;
但是,正如 Julien 所建議的,您可以像這樣重寫您的查詢:
SELECT COUNT(DISTINCT ip_address) FROM `ports` WHERE status IS TRUE;
這樣,您根本不需要子查詢/派生表,因為使用 DISTINCT 關鍵字,COUNT 函式將僅計算表
ip_address
中不同的出現次數ports
。