2017-07-06 48 views
0

說我有一個表,如下所示:SQL COUNT DISTINCT用於在MS Access每個ID

id category  app 
------------------------ 
1 game   angry birds 
1 game   happy dogs 
2 productivity calculator 
3 health   fitness tracker 
1 game   angry birds 
2 game   snake 

該表顯示每個用戶打開一段時間的應用程序。例如,假設您每次在手機上打開應用時都記下了這些內容。現在爲100人重複這一點。如上所述,所有這些數據都存儲在一個表中。

我想弄清楚如何計算每個人在特定類別內使用多少個不同的應用程序。例如,對於「遊戲」類別,我希望:

id num_apps 
------------ 
1 2 
2 1 
3 0 

我明白,一個人不能使用COUNT在MS-訪問(DISTINCT ..),並已經看到如何實現這個其他職位 - 我儘管如此,仍然無法將其應用於這種情況。

我曾嘗試以下,我相信給我的是如何在一個特定類別使用過的每個應用程序的人非重複計數:

SELECT COUNT(*) 
FROM 
(SELECT DISTINCT id AS gamer_id 
FROM UseList 
WHERE category = 'game') 
AS b, UseList AS ul 
WHERE b.gamer_id = ul.id AND category = 'game' 
GROUP BY b.gamer_id; 

我怎麼能適用於不同的搜索呢?我想過以各種方式遍歷每個gamer_id,但這似乎並不太直接。 謝謝!

+0

從WHERE刪除遊戲條件。相反,做條件聚合。 – jarlh

+0

您的表格有一些列,但查詢使用其他列。 – jarlh

+0

@jarlh哪些列是不同的?不知道如何做條件聚合,但會查找它,謝謝 – Windmill

回答

0

你可以使用

select t.id, count(*) 
    from (
    select distinct id, app 
    from UseList 
    where categorty ='game') t 

    group by t.id 
+0

這似乎已經做了伎倆 - 謝謝你!很簡單,不知道我是如何錯過的。 (不幸的是,MS Access不允許使用COUNT(DISTINCT app)) – Windmill

+0

@Windmill謝謝...然後從我的答案中刪除count(不同的應用程序)部分.. – scaisEdge

0

我不知道我的理解,但你可以試試這個?

SELECT A.ID, A.CATEGORY , COUNT(APP) AS NUM_APPS 
FROM 
(SELECT A1.ID, A2.CATEGORY 
FROM (SELECT DISTINCT ID FROM TG1) A1 
     CROSS JOIN (SELECT DISTINCT CATEGORY FROM TG1) A2 
) A 
LEFT JOIN (SELECT DISTINCT ID, CATEGORY, APP 
      FROM TG1) B ON A.ID=B.ID AND A.CATEGORY=B.CATEGORY 
GROUP BY A.ID, A.CATEGORY 
+0

已經設法使用上一個答案解決此問題,但感謝這! – Windmill