记录零计数记录的聚合查询的名称是什么?

时间:2015-05-08 14:03:09

标签: mysql sql aggregate-functions aggregate

我一直看到问题(可能还有关于如何处理它们的Meta帖子),这些问题遵循以下方针:

  

获取[某个对象]的[某个字段]的计数。

问题通常在于:

SELECT myField, COUNT(*)
FROM myTable
GROUP BY myField;

其中不会返回具有0个计数的行,因此通常需要将外部联接预先形成回表以获取这些计数。

此类程序是否有名称?它仍然只是Aggregation吗?我怀疑它是否不同的原因是因为它涉及使用连接来聚合表中不存在的数据。

另外,我听说过特殊类型的聚合,例如conditional aggregation,所以我认为这种类型的操作可能有一个术语[俚语或标准]。

编辑,解释我所说的'不存在'的数据意味着像这样的用户表:

| id |  name |
+----+-------+
| 1  | John  |
| 2  | Bob   |
| 3  | Sandy |
| 4  | Time  |

这样的登录表:

| user_id | loginTime |
+---------+-----------+
|    1    | 01:43:44  |
|    1    | 02:43:44  |
|    3    | 03:43:44  |
|    3    | 04:43:44  |
|    3    | 05:43:44  |
|    4    | 06:43:44  |

如果我想获得每个用户的登录总数,我可以执行以下操作:

SELECT u.id, COUNT(*) AS numLogins
FROM users u 
JOIN login l ON l.user_id = u.id
GROUP BY u.id;

但是,除非我使用外连接和coalesce函数,否则这不会为用户2返回一行。这种操作的名称是什么?

1 个答案:

答案 0 :(得分:1)

您描述的问题(非常好)通常称为稀疏数据

所有类型的"操作方法"获得那些"零"的建议/模式从稀疏数据中返回的计数。

我听过的条款是指密度,并将数据转换为密集形式。 (获取数据"加密"(甚至是一个真正的词?),将该过程称为"致密化"(我不认为这是一个真正的词无论是。)

我相信我在Oracle数据仓库指南(Oracle文档)中遇到过这些术语。其他供应商可能会使用不同的白话。我不知道那里有任何官方标准术语。

修改

参考:Oracle"数据仓库和商业智能" http://docs.oracle.com/cd/B28359_01/server.111/b28313/analysis.htm#i1014934