Mysql
在同一個表中使用和不使用 WHERE 子句執行 SQL 計數
這是我的第一篇文章,如果我不夠簡潔,我深表歉意。我正在嘗試提出一個 SQL 查詢來辨識數據質量問題。
這是範例表:
DeviceOS Bytes Roku 10,000 AppleTV -50000 SamsungTV -100000 Roku -100000 AppleTV 30000 Roku -90000 AppleTV -20000 AppleTV -10000 SamsungTV -100000
輸出表:
DeviceOS Total Count bad_count Roku 3 2 AppleTV 4 2 SamsungTV 1 1
Total_count 欄位基於 deviceOS 聚合,bad_count 僅獲取兆字節欄位為負的所有行。
基本上試圖做到這一點-> DeviceOS 從表組中選擇 DeviceOS,count(*)
從表 DeviceOS 中選擇 DeviceOs,count(*),其中兆字節 < 0
如何將上述兩個查詢組合起來,並將它們的結果顯示在一起,類似於輸出表?
對於 MySQL 使用簡單
SELECT DeviceOS, COUNT(*) `Total Count`, SUM(Bytes < 0) bad_count FROM source_table GROUP BY DeviceOS
對於 BigQuery 使用
SELECT DeviceOS, COUNT(*) `Total Count`, COUNTIF(Bytes < 0) bad_count FROM source_table GROUP BY DeviceOS
您可以對 SQL Server 執行以下操作:
SELECT DeviceOS AS DeviceOS , COUNT(*) AS TotalCount , SUM(IIF(Bytes < 0, 1, 0)) AS BadCount FROM ( VALUES ('Roku', 10000) , ('AppleTV', -50000) , ('SamsungTV', -100000) , ('Roku', -100000) , ('AppleTV', 30000) , ('Roku', -90000) , ('AppleTV', -20000) , ('AppleTV', -10000) , ('SamsungTV', -100000) ) AS t1 (DeviceOS, Bytes) GROUP BY DeviceOS
我們按 DeviceOS 列分組並獲取名稱和計數。
唯一棘手的部分是使用
SUM(IIF(Bytes < 0, 1, 0)) AS BadCount
錯誤計數。它的作用是檢查字節大小是否小於 0(意味著它是負數):
- 如果是,則將**+1**添加到總和
- 如果不是,則將**+0**添加到總和