需要帮助编写查询以获取总计数和唯一计数
Posted
技术标签:
【中文标题】需要帮助编写查询以获取总计数和唯一计数【英文标题】:Need help in writing query to het total and unique count 【发布时间】:2021-08-02 20:57:33 【问题描述】:我有一个表,我想检索访问该页面的用户计数,一个是总计数,另一个是唯一计数。
总计数- 如果用户 X 访问页面三次,Y 访问页面两次,则总计数应为 5 & 唯一计数- 如果用户 X 访问页面三次,Y 访问页面两次,则总计数应为 2(计算唯一用户)
表结构如下
CREATE TABLE XYZ (
id int(11) NOT NULL AUTO_INCREMENT,
joveuser varchar(64) DEFAULT NULL,
page text NOT NULL,
timestamp datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
time_on_page int(8) NOT NULL DEFAULT '1',
country varchar(250) DEFAULT NULL,
);
这里 joveuser 是用户,页面将访问页面。
下面是插入查询
insert into xyz values('aaa','abc','2021-01-25',25,'CA');
insert into xyz values('bbb','def','2021-04-23',322,'unknown');
insert into xyz values('aaa','atgh','2021-02-12',15,'US');
insert into xyz values('aaa','fgh','2021-03-25',56,'unknown');
insert into xyz values('bbb','tyud','2021-02-14',85,'unknown');
insert into xyz values('ccc','jjj','2021-05-01',125,'US');
样本数据如下
<table>
XYZ
<thead>
<tr>
<th>id</th>
<th>joveuser</th>
<th>page</th>
<th>timestamp</th>
<th>time_on_page</th>
<th>country</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>aaa</td>
<td>abc</td>
<td>2021-01-25</td>
<td>25</td>
<td>CA</td>
</tr>
<tr>
<td>2</td>
<td>bbb</td>
<td>def</td>
<td>2021-04-23</td>
<td>322</td>
<td>unknown</td>
</tr>
<tr>
<td>3</td>
<td>aaa</td>
<td>atgh</td>
<td>2021-02-12</td>
<td>15</td>
<td>US</td>
</tr>
<tr>
<td>4</td>
<td>aaa</td>
<td>fgh</td>
<td>2021-03-25</td>
<td>56</td>
<td>unknown</td>
</tr>
<tr>
<td>5</td>
<td>bbb</td>
<td>tyud</td>
<td>2021-02-14</td>
<td>85</td>
<td>unknown</td>
</tr>
<tr>
<td>6</td>
<td>ccc</td>
<td>jjj</td>
<td>2021-05-01</td>
<td>125</td>
<td>US</td>
</tr>
</tbody>
</table>
如下示例输出
<table>
output
<thead>
<tr>
<th>totalcount</th>
<th>uniquecount</th>
<th>country</th>
</tr>
</thead>
<tbody>
<tr>
<td>3</td>
<td>2</td>
<td>unknown</td>
</tr>
<tr>
<td>3</td>
<td>2</td>
<td>other countries</td>
</tr>
</tbody>
</table>
这里的输出总访问量是 6,但有相同的用户访问,所以唯一计数是 3。我写了查询,但没有得到预期的输出。
在查询中需要帮助以获得以上输出。
【问题讨论】:
COUNT(user) AND COUNT(DISTINCT user) 分别。 @Akina 我已经尝试过了,但是对于未知国家的挑战是我需要单独计数和其他所有国家计数。那可能吗?任何建议 我已经尝试过了,但挑战在于未知国家,我需要单独计数,而其他所有国家都需要计数。这可能吗? 如果是这样,请调整您想要的输出 - 其中根本没有country
列。 PS。 dbfiddle.uk/…
@Akina 编辑的样本输出,其余国家应该在其他国家并且未知作为一个计数,我应该去联合所有吗?
【参考方案1】:
SELECT COUNT(joveuser) totalcount,
COUNT(DISTINCT joveuser) uniquecount,
CASE country WHEN 'unknown'
THEN 'unknown'
ELSE 'other countries'
END country
FROM test
GROUP BY 3
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=e6773e7e1b32a94c5b22c81cc1edd030
【讨论】:
以上是关于需要帮助编写查询以获取总计数和唯一计数的主要内容,如果未能解决你的问题,请参考以下文章