SQL Server 导致不同结果的两个相似查询之间的差异[已关闭]

mwkjh3gx  于 2023-01-20  发布在  其他
关注(0)|答案(1)|浏览(111)

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
6天前关闭。
社区在6天前审查了是否重新讨论此问题,并将其关闭:
原始关闭原因未解决
Improve this question
我有一个表tbl,我想从中提取一些数据的计数。
简而言之,我有两个选择:

select count(if(c10=7,1,null)) as recordCount
from tbl
where cId in (
    select max(cId)
    from tbl
    group by c37
);

以及

select count(*) as recordCount
from (
    select max(cId)
    from tbl
    where c10 = 7
    group by c37
) t1;

第一个查询返回151,第二个查询返回156。
为什么这两个查询的结果不同?

bvjveswy

bvjveswy1#

Select Count(if(c10=7,1,null)) as recordCount
from tbl 
where cId in (select max(cId) 
              from tbl 
              group by c37);

在英语中--对于c37的每个分组,从与这些ID匹配的记录中选择具有最大ID的一个--如果c10 = 7,则对其进行计数

Select Count(*) as recordCount
from (Select max(cId) 
      from tbl 
      where c10=7 
      group by c37) t1;

在英语中,对于c37和c10的每一个分组,取最大id,计算它们。
我写上面的内容是为了试着弄清楚查询在做什么。然后我看到了下面描述的问题。
至于你的问题,除非你考虑到max(cID)在第二个中可以为空,但在第一个中不能为空,否则数字的不同是没有意义的。-〉你可以在表中的一行中为空,但在使用IN语句时不能为空。
要显示这种情况,请运行以下查询

SELECT X
FROM (
  Select max(cId) as X
  from tbl 
  where c10=7 
  group by c37
) Z
WHERE X IS NULL

我希望你能坐到后面四排。
要使两个查询获得相同的结果,请对第二个查询使用以下命令

Select Count(X) as recordCount
from (Select max(cId) X
      from tbl 
      where c10=7 
      group by c37) t1;

相关问题