不同列的计数以及该列的不同值的每个记录

Count of distinct columns alongside each record of distinct value of that column

我是 SQL 的新手,不确定这是否是正确的方法,但基本上我正在尝试获取不同日期的计数并将其放在单个日期旁边

例如

Date     Username Count(Distinct(Date))
20220721 jbravo    3
20220722 jbravo    3
20220723 jbravo    3
20220721 mario    7
20220722 mario    7
20220723 mario    7
20220724 mario    7 
20220725 mario    7
20220726 mario    7
20220727 mario    7

我知道如何获取按用户分组的 count(distinct(date)),但是如果我这样做,我该如何实现以下内容

select Date, Username, Count(Distinct(Date))
from table
group by Username

会抛出一个错误,我需要在 group by 子句中添加日期

如果我在 group by 子句中添加日期,显然非重复计数变为 1

这是一个聚合问题。您可以使用常见的 table 表达式

WITH t1 AS (
  SELECT username, COUNT(DISTINCT(dates)) AS dist_dates
  FROM tab1
  GROUP BY username
  )
SELECT tab1.dates, tab1.username, t1.dist_dates
FROM tab1
INNER JOIN t1
ON t1.username = tab1.username

您应该知道最好的选择是加入 ID。但是,由于你没有提到你有那个,这个解决方案工作正常。

GROUP BY x, y, z 表示您想要每个 x、y、z 一个结果行。 group by username 一定是错误的,因为您希望每个用户名有多个结果行。

事实上,您根本不想聚合行,而是按原样显示所有行。您只想向这些行添加聚合信息。这是通过一个分析函数完成的,该函数是一个聚合函数,结合了一个 over 子句,它告诉 DBMS 您希望对哪些行进行聚合评估。

您还没有告诉我们您的 DBMS。这是标准的 SQL 查询:

select
  date,
  username,
  count(distinct date) over (partition by username) as dates
from mytable
order by date, username;