我有一个case语句,它通过每个项目的标志来计算分数,但分配给项目的用户。
它是一个符合/不符合项的计数,我的问题是,如果一个项在表中有2行,那么它的计数是2个不符合项,而它应该是1。
这是基本的案例陈述:
SELECT
user.id,
sum( CASE WHEN SCORE_FLAG = 'Y' THEN 1 ELSE 0 END) AS 'Compliant_Count',
sum( CASE WHEN SCORE_FLAG = 'N' THEN 1 ELSE 0 END) AS 'NonCompliant_Count',
sum( CASE WHEN SCORE_FLAG = 'Y' or SCORE_FLAG = 'N' then 1 ELSE 0 END) AS 'Total_count'
FROM Table
Group By user.id
这是下面的无效结果(我在item列中添加了-但这不会包含在我的查询中,因为我只按用户id分组)。
usera item1 0 1 1
usera item2 0 2 2--
usera item3 0 1 1
usera item4 0 1 1
这个用户有4个条目,但是条目2在表中有2行,所以当我希望它是1时,它显示了不符合2的值。
我怎样才能用case语句让它向后拉1行。我必须按用户而不是项目对结果进行分组,因为数据被加载到另一个只包含用户的表中。
第2项只能有1个不符合计数和1个总计数
但是,当我对数据进行分组时,它是按用户进行分组的,因此应该如下所示:
Usera 0 4 4
usera应该有4个不符合项的计数,但是目前我得到了5个,因为其中一个项有2行
2条答案
按热度按时间oxf4rvwz1#
我怀疑你想
distinct
:笔记:
根本没有
user
查询中定义的表别名,因此user.id
无效。我把它改名为user_id
不要对列别名使用单引号-单引号只能用于字符串文字如果y和n是唯一可能的值,那么最后一个表达式可以简化为
COUNT(DISTINCT item)
jckbn6z72#
使用
COUNT(DISTINCT)
而不是一个总数例如