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

如何在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;

逻辑说明:

  1. 两个子查询分别从Table2中取出频次最高的酸和碱的名称
  2. 筛选Table1中使用了这两种化学品之一的所有记录
  3. 按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 = '碱')
    )
);

逻辑说明:

  1. 先通过子查询获取所有频次达到最大值的酸的名称,同理获取所有频次最高的碱的名称
  2. 外层查询先筛选出使用了至少一种高频酸的Solution
  3. 再通过EXISTS子查询验证该Solution同时也使用了至少一种高频碱
  4. 用DISTINCT避免同一个Solution被重复返回

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 23:15:26