簡體   English   中英

SQL-計算每個不同的行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM