簡體   English   中英

如何統計每個類別的不同工作的唯一點擊次數

[英]How can I count unique clicks across jobs for each category

我將歸因於不同類別的鏈接性能存儲在這樣的已sent表中...

CREATE TABLE sent (
  customer_id INT,
  jobId INT,
  category VARCHAR(100),
  timestamp DATETIME DEFAULT CURRENT_TIMESTAMP
);

我正在嘗試創建一個查詢,該查詢可以向我顯示Y軸上的customer_id,以及跨X軸的不同類別。 使這個問題復雜化的是,我只想為每個唯一的作業ID計算一次點擊。 我已經嘗試使用下面的查詢來進行查詢,但這只是一個類別。 我要搜索的類別是固定的(總共約10個),並且想知道如何以最有效的方式進行搜索。 該表可能包含數百萬條記錄。

SELECT customer_id, count(customer_id) as unique_clicks_discovery
FROM (
  SELECT customer_id, jobId, COUNT(*) as discovery_clicks_unique
  FROM sent
  WHERE category = 'discovery'
  GROUP BY customer_id, jobId
) as discovery_click_roundup
GROUP BY customer_id

編輯:這是預期的結果,請參閱小提琴以查看數據。

ACCOUNT ID    |   DISCOVER UNIQUE CLICKS  |  PURCHASE UNIQUE CLICKS
--------------------------------------------------------------------
101           |   3                       |  3
102           |   1                       |  1
103           |   1                       |  1
104           |   1                       |  2

編輯2:使用示例數據:

INSERT INTO sent (customer_id, jobId, category) VALUES (101, 201, 'discovery');
INSERT INTO sent (customer_id, jobId, category) VALUES (101, 201, 'discovery');
INSERT INTO sent (customer_id, jobId, category) VALUES (101, 201, 'discovery');
INSERT INTO sent (customer_id, jobId, category) VALUES (101, 202, 'discovery');
INSERT INTO sent (customer_id, jobId, category) VALUES (101, 203, 'discovery');
INSERT INTO sent (customer_id, jobId, category) VALUES (101, 203, 'discovery');
INSERT INTO sent (customer_id, jobId, category) VALUES (101, 203, 'discovery');
INSERT INTO sent (customer_id, jobId, category) VALUES (101, 201, 'discovery');
INSERT INTO sent (customer_id, jobId, category) VALUES (102, 201, 'discovery');
INSERT INTO sent (customer_id, jobId, category) VALUES (102, 201, 'discovery');
INSERT INTO sent (customer_id, jobId, category) VALUES (103, 201, 'discovery');
INSERT INTO sent (customer_id, jobId, category) VALUES (103, 201, 'discovery');
INSERT INTO sent (customer_id, jobId, category) VALUES (104, 201, 'discovery');
INSERT INTO sent (customer_id, jobId, category) VALUES (101, 201, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (101, 201, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (101, 201, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (101, 202, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (101, 203, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (101, 203, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (101, 203, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (101, 201, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (102, 201, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (102, 201, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (103, 201, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (103, 201, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (104, 201, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (104, 201, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (104, 201, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (104, 202, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (103, 201, 'purchase');
INSERT INTO sent (customer_id, jobId, category) VALUES (103, 201, 'purchase');

DB Fiddle (包括樣本數據)

您可以在此處使用條件聚合

SELECT customer_id
, COUNT(DISTINCT CASE category WHEN 'discovery' THEN jobId END) AS unique_clicks_discovery
, COUNT(DISTINCT CASE category WHEN 'purchase'  THEN jobId END) AS unique_clicks_purchase
FROM sent
GROUP BY customer_id;

您必須為每個類別附加一條COUNT(..)行。

結果:

| customer_id | unique_clicks_discovery | unique_clicks_purchase |
| ----------- | ----------------------- | ---------------------- |
| 101         | 3                       | 3                      |
| 102         | 1                       | 1                      |
| 103         | 1                       | 1                      |
| 104         | 1                       | 2                      |

在數據庫小提琴上查看

SELECT customer_id, 
sum(case when category = 'discovery' then cnt else 0 end) discovery,
sum(case when category = 'purchase' then cnt else 0 end) purchase
FROM (
  SELECT category, customer_id, COUNT(distinct jobid) cnt
  FROM sent
  GROUP BY category, customer_id
) t
GROUP BY customer_id

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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