2015-05-08 35 views
0

我看到的問題隨後所有的線時間(也許是一元后會如何處理他們提出):記錄零計數記錄的聚合查詢的名稱是什麼?

獲取[某些領域]的計數[某些對象。

凡問題通常在於:

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; 

但是,除非使用外連接和合並函數,否則這不會爲用戶2返回一行。這種類型的操作叫什麼名字?

+2

「因爲它涉及到使用連接來聚合te數據不存在於表中「...沒有數據不存在...數據存在....或者它不是數據...你說」哪些數據不會返回0計數「...... 0計數什麼?回答這個「什麼」,你將有需要存在的數據:)如果你想要一個例子,我最近回答了一個關於類似案例的問題:http://stackoverflow.com/questions/30082636/how-can-您顯示零排序使用年份和月份動態區間 –

+0

條件聚合通常使用CASE實現,例如「SUM(CASE WHEN condition THEN one_int ELSE another_int END )'。 –

+0

@FabienTheSolution我明白你在說什麼,我試圖澄清。也許*對我的問題沒有回答,但很難谷歌這樣的東西。如果有一個名字,我不知道它,反過來也不能搜索它。 – AdamMc331

回答

1

您描述的問題(非常好)通常被稱爲稀疏數據

存在各種「如何做」的建議/模式,用於從稀疏數據中返回這些「零」計數。

我聽到的術語指的是密度,並將數據轉化爲稠密的表格。 (讓數據「緻密化」(甚至是一個真正的單詞?),將該過程稱爲「緻密化」(我認爲這不是一個真正的單詞)

我相信我碰到過這些術語。Oracle數據倉庫指南(Oracle文檔),其他廠商可以使用不同的方言,我不知道有任何正式的標準術語

編輯

參考:甲骨文「數據倉庫和商業智能」 http://docs.oracle.com/cd/B28359_01/server.111/b28313/analysis.htm#i1014934

+0

我很欣賞你試圖使用「密集」一詞的任何和所有變體。我已經找到了這篇文章(http://gerardnico.com/wiki/data_modeling/dense_sparse),我仍然閱讀它,所以我不知道*它是如何相關的,但它描述了密集和稀疏一種類似的方式,並且適用於我所問的問題。感謝您的意見。 – AdamMc331

+0

@ McAdam331作爲補充:http://research.microsoft.com/en-us/um/people/heckerman/ch99uai.pdf –

+0

@ McAdam331:我添加了對Oracle「數據倉庫和商業智能」文檔的參考。這些是他們使用的術語。我注意到,術語**稀疏數據**在整個行業和供應商中是相當普遍和標準的。 Ad for SQL報告這些零計數,我們需要「填補空白」。術語**密集數據**可能是適當的。 (我不太確定這些術語*緻密化*和*緻密化*。) – spencer7593