MS Access

时间:2017-07-06 10:00:34

标签: sql ms-access

说我有一张表如下:

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

我明白在MS-Access中不能使用COUNT(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,但这似乎也不太简单。 谢谢!

2 个答案:

答案 0 :(得分:0)

你可以使用

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

  group by t.id 

答案 1 :(得分: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