如何使用另一个唯一列获取列数?

时间:2015-06-20 05:29:58

标签: mysql

我正在收集网站访问者的某些操作。当我记录动作时,我会存储他们正在使用的用户ID和浏览器。

我想要计算每个浏览器的使用次数,但是如果有来自同一个用户的操作,它每次都会收集相同的浏览器,所以当它为每个浏览器计算时,我只想要它为每个用户计算一次浏览器。

这是我的尝试:

SELECT DISTINCT(user), browser, count(browser) AS browser_count
FROM tracking 
GROUP BY user, browser

这就是它的回报:

user|browser|browser_count
--------------------------
20  |Chrome |   5
156 |Chrome |   127
156 |Firefox|   2
156 |IE     |   2   
156 |Safari |   2
160 |Chrome |   269
160 |Firefox|   8
160 |IE     |   4
160 |Opera  |   6
160 |Safari |   4

结果显示,用户20记录了Chrome 5次,用户156记录了127次,用户160记录了269次。相反,我需要的是Chrome使用的总次数,但每个用户只记录一次,这将使其仅被独特用户使用总量的3倍。

这是我想要的回复:

browser|browser_count
---------------------
Chrome | 3
Firefox| 2
IE     | 2   
Safari | 2
Opera  | 1

3 个答案:

答案 0 :(得分:1)

解决方案直接来自Can I use COUNT() and DISTINCT together?

SELECT browser, COUNT(DISTINCT user)
    FROM tracking
    GROUP BY browser;

SQL Fiddle

答案 1 :(得分:1)

Chrome使用的总次数,但每位用户只记录一次应该是按浏览器分组的不同用户数:

yes

编辑:删除括号

答案 2 :(得分:0)

尝试以下,

Select browser, sum(counter) as browser_count from 
(
    SELECT DISTINCT(user) as user, browser, 1 as counter AS browser_count
    FROM tracking 
    GROUP BY user, browser
)T group by browser

或者你应该试试,

Select browser, count(user) as browser_count from 
    (
        SELECT DISTINCT(user) as user, browser, 1 as counter AS browser_count
        FROM tracking 
        GROUP BY user, browser
    )T group by browser