我有一个名为 AccessLog
每次用户在我的网站上点击“登录”时都会插入。重要的领域是 UserID
, BrowserName
以及 Date
. 这样做的目的是了解哪些浏览器是访问站点最多的浏览器。
以下是一个示例数据集:
| UserID | BrowserName | Date |
|--------|-------------|-------|
| 1 | Chrome | 05/28 |
| 1 | Chrome | 05/29 |
| 2 | Firefox | 05/29 |
| 1 | Chrome | 05/30 |
| 3 | Firefox | 05/31 |
这是我使用的sql代码(可在此处找到):
SELECT BrowserName
,(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER ()) pct
,COUNT(*) ct
FROM AccessLog
GROUP BY BrowserName
以下是我通过该查询得到的结果:
| BrowserName | pct | ct |
|-------------|------|----|
| Chrome | 60.0 | 3 |
| Firefox | 40.0 | 2 |
但这些是我想要的结果:
| BrowserName | pct | ct |
|-------------|------|----|
| Chrome | 33.3 | 1 |
| Firefox | 66.6 | 2 |
如何修改查询以对每个不同的查询进行计数 UserID
以及 BrowserName
配对一次,不要人为地增加计数?
2条答案
按热度按时间o4tp2gmn1#
您可以通过创建
cte
. 这是演示。输出:
5uzkadbs2#
你想用
count(distinct)
. 但在SQLServer中,直接作为窗口函数是不可能的。所以使用dense_rank()
技巧: