如何查询同一表中Reference_number 48值大于54的Shop_number记录
解决方案:查询满足特定条件的店铺编号
针对你的需求,这里提供两种可行的SQL实现方式,分别对应你提到的自连接和HAVING子句思路:
方法一:自连接实现
通过将表自身关联,把同一店铺的两条记录(Reference_number分别为48和54)配对,直接比较对应Value的大小:
SELECT d48.Shop_number FROM Details d48 JOIN Details d54 ON d48.Shop_number = d54.Shop_number WHERE d48.Reference_number = 48 AND d54.Reference_number = 54 AND d48.Value > d54.Value;
逻辑说明:
- 给表起两个别名
d48和d54,分别代表筛选出Reference_number=48和54的子数据集 - 通过
Shop_number将两个数据集关联,确保是同一店铺的记录 - 最后直接比较两个Value,保留满足
d48.Value > d54.Value的店铺编号
方法二:条件聚合 + HAVING子句
利用分组和条件聚合函数,在分组后计算每个店铺对应两个Reference_number的Value,再用HAVING筛选符合条件的结果:
SELECT Shop_number FROM Details WHERE Reference_number IN (48, 54) -- 仅保留需要的记录,优化查询效率 GROUP BY Shop_number HAVING MAX(CASE WHEN Reference_number = 48 THEN Value END) > MAX(CASE WHEN Reference_number = 54 THEN Value END);
逻辑说明:
- 先过滤出Reference_number为48或54的记录,减少后续分组计算的数据量
- 按
Shop_number分组,每个组对应一个店铺的两条目标记录 - 用
CASE WHEN分别提取每个店铺对应48和54的Value,通过MAX函数取出该值(因为每个店铺对应每个Reference_number只有一条记录,MAX等价于直接取值) - 在
HAVING子句中比较两个值的大小,筛选出符合条件的店铺编号
两种方法都能得到你期望的结果(222223和222224),可以根据实际数据量和表结构选择:自连接逻辑更直观,条件聚合则在需要同时计算多个类似指标时更灵活。
内容的提问来源于stack exchange,提问作者RaPtiLE
相关产品推荐
相关产品推荐

