sqlite - 为什么以下查询不会生成最受欢迎公寓的 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
返回一个整数,或者这是否与类型不匹配有关?因为它看起来确实如此。
解决方案
对我来说,它看起来像你指出的两行:
group by toh.t
having toh.h = max( toh.h )
具有以下含义:
toh.t
按键获取我的群组- 在这些组中,仅显示组
toh.h
中该字段值的最大值相等的组。如果我阅读正确,情况总是如此,因为toh.t
组中只有一个值。
我相信你想要的是在所有toh.h
之前的分组中取全局最大值,对吧?
推荐阅读
- spring-boot - 当执行器健康在不同端口上运行时如何拦截执行器健康请求
- linux-kernel - SWUpdate 错误的 mmc 设备地址
- database - 如何使用 sqlite3 作为磁盘支持的 O(n) 哈希表?
- markdown - 引用 ReadTheDocs 页面的正确方法(路径中有或没有 .html)
- c++ - 如何在 C++ 中重载 = 以便在创建对象时使用它?
- pip - 命令错误退出状态 1:python setup.py egg_info 检查日志以获取完整的命令输出,同时安装:drun-airsim-client by pip
- html - 为什么我的空间没有呈现
标签?
- sql - 如何验证 SQL 代码/存储过程的正确性
- python-multiprocessing - 如何将参数传递给python多处理池imap?
- python-3.7 - 我可以查看训练模型的损失函数历史吗?