[英]SQL - count each distincted row
我想通過監視特定字段的不同值以及每個不同值出現多少次來分析表的內容。
假設我們有這張桌子...
Field
000
000
000
111
111
222
333
因此結果將是:
Field Count
000 3
111 2
222 1
333 1
查詢將獲得什么結果?
只是:
SELECT field, count(*) as count
FROM table
GROUP BY field
關於這點,沒有什么其他要說的,也許是所有匯總查詢中最簡單的。
但是,如果要監視,則可能需要跟蹤以前有多少東西,現在有多少東西。 我為此使用SQL SERVER語法,但該技術相當普遍適用:
如果您創建一個具有日期,字段和計數列的歷史表,則每分鍾運行一次(例如):
INSERT INTO history
SELECT iter.iteration, t.field, t.count(*) as count
FROM table t
CROSS JOIN
(SELECT GetUtcDate() as iteration) iter
GROUP BY field
然后,您將獲得每分鍾插入一堆的行,這些行的計數不斷變化,並且保存數據的日期遞增。 您需要做的就是比較事情如何變化:
SELECT *
FROM
history o
FULL OUTER JOIN
history n
ON
o.field = n.field AND
o.count <> n.count AND
o.iteration = '2001-01-01 00:00:00' AND
n.iteration = '2001-01-01 00:01:00'
我們使用完全外部聯接,以便字段可以在迭代之間完全往返(刪除所有類型,添加新字段等)。 我們將過濾以僅顯示未更改的計數。 該查詢還演示了如何將表連接到自身,這是一個方便的竅門
SELECT Field, COUNT(*) AS Count
FROM table
GROUP BY Field
ORDER BY Count
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.