SQL查找一个计数高于另一个计数的键

SQL查找一个计数高于另一个计数的键,sql,oracle,Sql,Oracle,好的,我有一张有接触史的桌子。可能有两种情况: +----------+----------+ | "TEXTID" | "ACTION" | +----------+----------+ | "1" | "430" | | "1" | "440" | | "1" | "430" | | "2" | "430" | +----------+----------+ 现在我想检查这个表中的每个textid,它有430个操作,而不是4

好的,我有一张有接触史的桌子。可能有两种情况:

+----------+----------+
| "TEXTID" | "ACTION" |
+----------+----------+
| "1"      | "430"    |
| "1"      | "440"    |
| "1"      | "430"    |
| "2"      | "430"    |
+----------+----------+
现在我想检查这个表中的每个textid,它有430个操作,而不是440个操作

我尝试使用计数和子查询,但对于textid2,问题是计数440没有返回值,因此我无法比较1>0

有没有办法解决这个问题

到目前为止,我的代码是:

select textid
from tbltextkontakthist t
where t.aktion = 430
group by t.textid
having count(t.textkontakthistid) >
(select count(t2.textkontakthistid)
from tbltextkontakthist t2
where t2.aktion = 440
and t2.textid = t.textid
group by t2.textid);
让我进一步解释:操作430将文档标记为已看到,而操作440将删除该状态。我想看每一份被看到或相反的文件。由于我在数据库中没有其他“是/否”标记,因此如果文档更经常地被标记为“已看见”而不是“未看见”,我需要自己计算

换句话说,文档textid需要有比“440”更多的操作“430”

SELECT TEXTID
FROM <table>
GROUP BY TEXTID
HAVING SUM(CASE WHEN Action=430 THEN 1 ELSE 0 END) > SUM(CASE WHEN Action=440 THEN 1 ELSE 0 END)
假设你只需要比较430和440


假设您只需要比较430和440。

分组。使用大小写表达式进行条件计数。已尝试从tbltextkontakthist t中选择textid,其中t.aktion=430按t.textid进行分组,其中countt t.textkontakthistid>0时选择大小写,然后countt2.textkontakthitid>0,否则0将作为来自tbltextkontakthist t2的条目结束,其中t2.aktion=440和t2.textid=t、 textid按t2.textid分组;但是这不起作用,因为,正如我所说,计数结果没有给我0。仍然没有得到你想要的吗?请添加更多预期输出的详细信息?其中430个操作多于440个操作没有得到这意味着任何预期结果都可以显示?分组。使用大小写表达式进行条件计数。已尝试从tbltextkontakthist t中选择textid,其中t.aktion=430按t.textid进行分组,其中countt t.textkontakthistid>0时选择大小写,然后countt2.textkontakthitid>0,否则0将作为来自tbltextkontakthist t2的条目结束,其中t2.aktion=440和t2.textid=t、 textid按t2.textid分组;但是这不起作用,因为,正如我所说,计数结果没有给我0。仍然没有得到你想要的吗?请添加更多预期输出的详细信息?其中430个操作多于440个操作没有得到这意味着任何预期结果都可以显示?