SQL查询多个计数';s导致相同(但不正确)的值
我有一个数据集myTable,如下所示:SQL查询多个计数';s导致相同(但不正确)的值,sql,count,Sql,Count,我有一个数据集myTable,如下所示: username saveType Alice auto Alice auto Alice manual Alice manual Bob auto Bob auto Bob auto Bob auto username AutoCount ManualCount Alice 2 2 Bob 4
username saveType
Alice auto
Alice auto
Alice manual
Alice manual
Bob auto
Bob auto
Bob auto
Bob auto
username AutoCount ManualCount
Alice 2 2
Bob 4 0
我想计算每个用户找到的自动和手动存储类型的数量。
理想情况下,我希望查询结果如下所示:
username saveType
Alice auto
Alice auto
Alice manual
Alice manual
Bob auto
Bob auto
Bob auto
Bob auto
username AutoCount ManualCount
Alice 2 2
Bob 4 0
但当我运行此查询时:
SELECT username, COUNT(saveType="auto") AutoCount, COUNT(savetype="manual") ManualCount
FROM myTable
GROUP BY username
我得到的是:
username AutoCount ManualCount
Alice 4 4
Bob 4 4
db是。任何关于这里发生的事情的解释都会很有帮助!谢谢 当
SELECT
username,
COUNT(case when saveType='auto' then 1 end) AutoCount,
COUNT(case when savetype='manual' then 1 end) ManualCount
FROM myTable
GROUP BY username
当
SELECT
username,
COUNT(case when saveType='auto' then 1 end) AutoCount,
COUNT(case when savetype='manual' then 1 end) ManualCount
FROM myTable
GROUP BY username
将当前查询中的
COUNT
替换为SUM
,它应该可以工作:
SELECT
username,
SUM(saveType='auto') AutoCount,
SUM(savetype='manual') ManualCount
FROM yourTable
GROUP BY username;
COUNT(saveType='auto')
的问题在于,其中的表达式的计算结果要么为0(false),要么为1(true)。但是,在这两种情况下,COUNT
将为它们计数1SUM
通过有效地忽略零值来解决此问题。将当前查询中的COUNT
替换为SUM
,它应该可以工作:
SELECT
username,
SUM(saveType='auto') AutoCount,
SUM(savetype='manual') ManualCount
FROM yourTable
GROUP BY username;
COUNT(saveType='auto')
的问题在于,其中的表达式的计算结果要么为0(false),要么为1(true)。但是,在这两种情况下,COUNT
将为它们计数1SUM
通过有效地忽略零值来绕过此问题。您也可以尝试此查询:
select r.username, t1.AutoCount, t2.Manualcount from
yourtable r inner join (select username, count(saveType) autoCount from yourtable where saveType='auto' group by username) t1
on t1.username = r.username
inner join (select username, count(saveType) ManualCount from yourtable where saveType ='manual' group by username) t2
on t2.username = r.username
希望这能对您有所帮助。您也可以尝试以下查询:
select r.username, t1.AutoCount, t2.Manualcount from
yourtable r inner join (select username, count(saveType) autoCount from yourtable where saveType='auto' group by username) t1
on t1.username = r.username
inner join (select username, count(saveType) ManualCount from yourtable where saveType ='manual' group by username) t2
on t2.username = r.username
希望这能对您有所帮助。这是什么数据库?SQL Server/MySQL/Postgres?请标记数据库。这是什么数据库?SQL Server/MySQL/Postgres?请标记数据库。它出现了一个错误:“sum的参数1:type'boolean'检测到,'decimal'预期:(第3行,第9列)”我看到您在演示中的输出是正确的,这可能只是我的数据库有问题。它出现了一个错误,说:“sum的参数1:type'boolean'检测到,'decimal'预期:(第3行,第9列)”我在演示中看到您的输出是正确的,这可能只是我的DB的问题,然后可能。@TimBiegeleisen,对于count,它将返回null,这就是为什么使用coalesce将null转换为0:)似乎在没有
coalesce的情况下工作正常COUNT
忽略NULL
值。@TimBiegeleisen,谢谢-这是一个新的学习,我不知道coalesce()
是多余的count()
从不返回NULL
@TimBiegeleisen,因为count将返回NULL,这就是为什么coalesce用于将NULL转换为0:)在没有coalesce
的情况下似乎可以正常工作COUNT
忽略NULL
值。@TimBiegeleisen,谢谢-这是一个新的学习,我不知道coalesce()
是多余的count()
从不返回NULL
。