You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查询存在多个不同馆藏地点的图书?现有HAVING子句失效

问题分析与解决

原SQL语句无法得到正确结果的原因有两个:

  • 分组逻辑错误:同时按book_title和location_code分组,每个分组仅对应单本书的单个馆藏地点,无法统计一本书的总地点数。
  • 条件阈值错误:你需要的是「多个馆藏地点」(至少2个),但原语句用了count(location_code) > 2,即便分组正确,也会漏掉刚好有2个地点的图书。

正确SQL写法

1. 仅获取拥有多个馆藏地点的图书名称

select book_title
from books
group by book_title
having count(distinct location_code) >= 2;
  • count(distinct location_code):统计每本书对应的不同馆藏地点数量,避免同一地点的多本重复计数。
  • >=2:筛选出地点数量至少为2的图书。

2. 获取图书名称及对应的所有馆藏地点

如果需要同时查看这些图书的具体馆藏地点,可使用以下两种方式:

方法一:子查询关联

select b.book_title, b.location_code
from books b
inner join (
    select book_title
    from books
    group by book_title
    having count(distinct location_code) >= 2
) as multi_loc_books 
on b.book_title = multi_loc_books.book_title;

方法二:窗口函数筛选

select book_title, location_code
from (
    select 
        book_title, 
        location_code,
        count(distinct location_code) over (partition by book_title) as loc_count
    from books
) as book_loc_stats
where loc_count >= 2;

内容的提问来源于stack exchange,提问作者Yuan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 06:57:02