使用带重复值的数组进行SQL IN查询时如何实现重复计数
问题原因
IN 运算符仅做存在性判断,无论列表内同一个值出现多少次,符合条件的原表行只会被匹配一次,因此COUNT统计结果不会关联IN列表内的重复次数。
实现方案
将需要匹配的列表构造为临时行集,和原表做内连接即可实现重复匹配计数:
- 支持
VALUES行构造器的数据库(PostgreSQL、MySQL 8.0+、SQL Server 等)可直接用如下写法:
SELECT b.id_exo, COUNT(b.id_exo) FROM (VALUES (10), (10)) AS t(id_seance) INNER JOIN BLOC b ON b.id_seance = t.id_seance GROUP BY b.id_exo;
- 低版本MySQL等不支持
VALUES行构造的场景,可以用UNION ALL构造临时行集:
SELECT b.id_exo, COUNT(b.id_exo) FROM ( SELECT 10 AS id_seance UNION ALL SELECT 10 AS id_seance ) AS t INNER JOIN BLOC b ON b.id_seance = t.id_seance GROUP BY b.id_exo;
效果说明
临时行集会保留列表内的重复值,连接时每一个重复的匹配项都会和原表符合条件的行关联一次,最终统计出来的COUNT结果就会和列表内的重复次数对应。
内容的提问来源于stack exchange,提问作者Yann92
相关产品推荐
相关产品推荐

