繁体   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