首页 > 解决方案 > 为什么以下查询不会生成最受欢迎公寓的 ID 和地址?

问题描述

我有一个简单的数据库,其中一张表中包含公寓,另一张表中包含对这些公寓(或他们的 id)感兴趣的人的 ID。我正在尝试使用嵌套查询来获取对他们感兴趣的人最多的公寓

select toh.t, toh.o, toh.h
from (
  select ok.houseid as t, va.houseaddress as o, count ( ok.customerid ) as h
  from house va
    inner join is_interested ok
      on va.houseid = ok.houseid
  group by t
) toh
group by toh.t
  having toh.h = max( toh.h )
;

这不符合我的要求。内部select应该给我一张桌子,上面有 ID、地址,最后是对他们感兴趣的人的 ID 计数,按公寓 ID 分组,这 id 做得很好。

因此,问题很可能出在最后两行:

group by toh.t
  having toh.h = max( toh.h )

因为它返回所有可用的公寓,无论有多少人对它们感兴趣。将此更改为

group by toh.t
  having toh.h > 1

为我选择正确的公寓(目前最多有 2 人对所述公寓感兴趣)。看起来我不完全理解该功能max应该如何工作。不应该count返回一个整数,或者这是否与类型不匹配有关?因为它看起来确实如此。

标签: sqlitemaxaggregate-functionshaving

解决方案


对我来说,它看起来像你指出的两行:

group by toh.t
having toh.h = max( toh.h )

具有以下含义:

  1. toh.t按键获取我的群组
  2. 在这些组中,仅显示组toh.h中该字段值的最大值相等的组。如果我阅读正确,情况总是如此,因为toh.t组中只有一个值。

我相信你想要的是在所有toh.h 之前的分组中取全局最大值,对吧?


推荐阅读