Sqlite 筛选必须至少存在1次的2个值的外观

Sqlite 筛选必须至少存在1次的2个值的外观,sqlite,filter,appearance,Sqlite,Filter,Appearance,标题可能不好,想不出更好的 我的评论数据,每个评论都由usernameChannelId分配给一个帐户: usernameChannelId | hasTopic | sentiment_sum | commentId a | 1 | 4 | xyxe24 a | 0 | 2 | h5hssd a | 1 | 3

标题可能不好,想不出更好的

我的评论数据,每个评论都由usernameChannelId分配给一个帐户:

usernameChannelId | hasTopic | sentiment_sum | commentId
a                 | 1        | 4             | xyxe24
a                 | 0        | 2             | h5hssd
a                 | 1        | 3             | k785hg
a                 | 0        | 2             | j7kgbf
b                 | 1        | -2            | 76hjf2
c                 | 0        | -1            | 3gqash
c                 | 1        | 2             | ptkfja
c                 | 0        | -2            | gbe5gs
c                 | 1        | 1             | hghggd
我的代码:

SELECT u.usernameChannelId, avg(sentiment_sum) sentiment_sum, u.hasTopic
FROM total_comments u
WHERE u.hasTopic is True
GROUP BY u.usernameChannelId
HAVING count(u.usernameChannelId) > 0

UNION

SELECT u.usernameChannelId, avg(sentiment_sum) sentiment_sum, u.hasTopic
FROM total_comments u
WHERE u.hasTopic is False
GROUP BY u.usernameChannelId
我想获取所有UsernameChannelId,其中至少有1条hasTopic==0的评论和1条hasTopic==1的评论(以统计方式比较这两个组,并删除仅在topic或offtopic视频中发表评论的用户)


我怎样才能这样过滤呢?

这里有一个小技巧可能会有所帮助。首先,你需要熟悉,这里是一个摘录自文件

大小写表达式

CASE表达式的作用类似于其他表达式中的IF-THEN-ELSE 编程语言

出现在CASE关键字和之间的可选表达式 第一个WHEN关键字称为“base”表达式。有两个 CASE表达式的基本形式:具有基本表达式和 那些没有

类似于
CASE的表达式,当hastTopic为False时,如果hastTopic为0,则1 else 0 END
将计算为1。
hasTopic的表达式为True
类似

现在,可以对这些情况进行汇总,这将告诉您用户是否有hasTopic为True和hasTopic为False的行

having子句中的类似内容可能会起作用(当然,每个值对应一个)

具有SUM(当hastTopic为False时为1,否则为0结束)>0

(有必要删除WHERE子句,并且不需要UNION查询)