需要帮助编写查询以获取总计数和唯一计数

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

【讨论】:

以上是关于需要帮助编写查询以获取总计数和唯一计数的主要内容,如果未能解决你的问题,请参考以下文章

复杂核心数据查询需要帮助

如何使用 sql 中的单个查询获取项目计数和总计数?

是否有任何其他选项可以从表中获取总计数和同一查询中列的不同计数?

用于获取不同日期以及唯一计数最大值的大查询

有没有办法在单个 psql 查询中返回总计数和行数?

LINQ 查询多个组和最新记录的计数 - Oracle DB