不同列的计数以及该列的不同值的每个记录
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;
我是 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;