如何在SQL中查询同时使用最常见酸与碱的所有Solution?
解决方案
场景1:仅存在唯一的最频繁酸和最频繁碱
如果Table2中频次最高的酸和碱都只有一个,可使用以下SQL语句:
SELECT t.Solution FROM Table1 t WHERE t.`Use of Chemical` IN ( -- 获取频次最高的酸 (SELECT Name FROM Table2 WHERE Type = '酸' ORDER BY Count DESC LIMIT 1), -- 获取频次最高的碱 (SELECT Name FROM Table2 WHERE Type = '碱' ORDER BY Count DESC LIMIT 1) ) GROUP BY t.Solution HAVING COUNT(DISTINCT t.`Use of Chemical`) = 2;
逻辑说明:
- 两个子查询分别从Table2中取出频次最高的酸和碱的名称
- 筛选Table1中使用了这两种化学品之一的所有记录
- 按
Solution分组后,仅保留同时包含两种化学品的分组(通过COUNT(DISTINCT ...) = 2确保两种化学品都被使用)
场景2:存在多个并列最高的酸/碱
如果Table2中有多种酸或碱的频次并列最高,需要确保Solution至少使用了其中一种最频繁的酸,且至少使用了其中一种最频繁的碱,可使用以下语句:
SELECT DISTINCT t.Solution FROM Table1 t -- 确保该Solution使用了至少一种最频繁的酸 WHERE t.`Use of Chemical` IN ( SELECT Name FROM Table2 WHERE Type = '酸' AND Count = (SELECT MAX(Count) FROM Table2 WHERE Type = '酸') ) -- 同时确保该Solution使用了至少一种最频繁的碱 AND EXISTS ( SELECT 1 FROM Table1 t2 WHERE t2.Solution = t.Solution AND t2.`Use of Chemical` IN ( SELECT Name FROM Table2 WHERE Type = '碱' AND Count = (SELECT MAX(Count) FROM Table2 WHERE Type = '碱') ) );
逻辑说明:
- 先通过子查询获取所有频次达到最大值的酸的名称,同理获取所有频次最高的碱的名称
- 外层查询先筛选出使用了至少一种高频酸的Solution
- 再通过
EXISTS子查询验证该Solution同时也使用了至少一种高频碱 - 用
DISTINCT避免同一个Solution被重复返回
内容的提问来源于stack exchange,提问作者chemslatt123
相关产品推荐
相关产品推荐

