1

少し複雑なことを行うクエリを作成しようとしていますが、正しい方向に向ける可能性のあるものを見つけることができませんでした。おそらくあなたが助けることができます!

これはソース データです。

7457, "05:06:26 UTC", 15
7457, "05:06:26 UTC", 15
7457, "05:06:26 UTC", 15
7457, "05:06:26 UTC", 15 
2341, "05:12:34 UTC", 10
2341, "05:12:34 UTC", 10
2341, "05:12:34 UTC", 10
2341, "05:12:34 UTC", 10
5678, "05:12:34 UTC", 15
5678, "05:12:34 UTC", 15
5678, "05:12:34 UTC", 15
5678, "05:12:34 UTC", 15
5678, "05:12:34 UTC", 15
5678, "05:12:34 UTC", 15
5678, "05:12:34 UTC", 15
5678, "05:12:34 UTC", 15
5678, "05:12:39 UTC", 15
5678, "05:12:39 UTC", 15
1111, "06:00:00 UTC", 10
2222, "07:00:00 UTC", 15
3333, "08:00:00 UTC", 10

重複した統計を見つけるためのクエリがあります。

SELECT userID, timestamp, statType, COUNT(*) - 1 AS DuplCount
FROM [dataset1.table1] 
GROUP BY userID, timestamp, statType 
HAVING DuplCount > 0;

(同じユーザー ID とタイムスタンプを持つ統計のみが重複と見なされることに注意してください。)

これにより、次のようなテーブルが得られます

userID  timestamp       statType    DuplCount    
7457    05:06:26 UTC    15          3    
2341    05:12:34 UTC    10          3    
5678    05:12:34 UTC    15          7     
5678    05:12:39 UTC    15          1   

このデータをさらに統合して、別のテーブルに 1 つの行として挿入できるようにしたいと考えています。同じ statType の重複数の合計です。私はそれが次のように見えるようにしたい

table            stat10DuplCount  stat15DuplCount    
dataset1.table1  3                11 

どのように進めればよいかわかりません...これはすべて 1 つのクエリで実行できますか (推奨)、それとも複数のクエリを実行するか、クエリ後のデータ処理を行う必要がありますか?

4

2 に答える 2

2

サブクエリ:

SELECT "dataset1.table1" table, COUNT(IF(statType=10,1,null)) stat10DuplCount, COUNT(IF(statType=15,1,null)) stat15DuplCount
FROM (
    SELECT userID, timestamp, statType, COUNT(*) - 1 AS DuplCount
    FROM [dataset1.table1] 
    GROUP BY userID, timestamp, statType 
    HAVING DuplCount > 0
)

(公開データセットを対象とする実用的なクエリを提供するか、データのサンプルを公開すると、回答とテストが常に簡単になります)

作業例:

SELECT "dataset1.table1" tablename,
       COUNT(IF(statType=10,1,null)) stat10DuplCount,
       COUNT(IF(statType=15,1,null)) stat15DuplCount
FROM (SELECT 15 statType),(SELECT 10 statType),(SELECT 15 statType),(SELECT 15 statType)

tablename       stat10DuplCount stat15DuplCount  
dataset1.table1 1               3   
于 2014-08-23T03:08:07.637 に答える
1

私は自分がやりたいことを正確に行う方法を見つけました。このクエリと Felipe のクエリの唯一の違いは、重複の各セットを 1 回としてカウントするのではなく、重複の合計を取ることです。

SELECT "dataset1.table1" table, SUM(IF(statID=10,DuplCount,null)) stat10DuplCount, SUM(IF(statID=15,DuplCount,null)) stat15DuplCount, 
FROM (
    SELECT userID, timestamp, statType, COUNT(*) - 1 AS DuplCount
    FROM [dataset1.table1] AS statsTable
    GROUP BY userID, timestamp, statType 
    HAVING DuplCount > 0
);

結果は次のとおりです。

table            stat10DuplCount  stat15DuplCount    
dataset1.table1  3                11 
于 2014-09-02T23:47:32.107 に答える