【问题标题】:SQL COUNT DISTINCT for each ID in MS AccessMS Access 中每个 ID 的 SQL COUNT DISTINCT
【发布时间】:2017-07-06 18:34:49
【问题描述】:

假设我有一张如下表:

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,但这似乎也不太简单。 谢谢!

【问题讨论】:

  • 从 WHERE 移除游戏条件。而是进行条件聚合。
  • 您的表有一些列,但查询使用了其他列。
  • @jarlh 哪些列不同?不知道如何进行条件聚合,但会查一下,谢谢

标签: sql ms-access


【解决方案1】:

你可以使用

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

  group by t.id 

【讨论】:

  • 这似乎成功了 - 谢谢!!如此简单,不知道我是怎么错过的。 (不幸的是,MS Access 不允许 COUNT (DISTINCT app)
  • @Windmill 谢谢......然后从我的回答中删除 count(distinct app) 的部分......
【解决方案2】:

我不确定我是否理解,但你可以试试这个吗?

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

【讨论】:

  • 已经设法使用以前的答案解决了这个问题,但谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-01
  • 2012-05-10
相关资源
最近更新 更多