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

MySQL查询所有托盘百分比均为0的打印机问题求助

MySQL查询所有托盘百分比均为0的打印机问题求助

我明白你现在的需求啦——你想找出那些三个托盘(Tray1、Tray2、Tray3)的百分比全都是0的打印机,但目前的SQL会把只要有一个托盘是0的打印机都拉出来,比如Printer_2明明Tray2是50,却也被返回了,这肯定不是你想要的结果对吧?

你的原查询问题出在:它只是筛选出了「存在至少一个符合条件(托盘是1/2/3且百分比为0)的记录」,然后返回这些记录对应的打印机,完全没考虑该打印机的其他托盘状态。要实现你的需求,我们需要确保某台打印机的所有三个目标托盘的百分比都是0,可以用下面两种常用方法:

方法一:GROUP BY + HAVING 子句(推荐,简洁高效)

这种方法通过分组统计来验证所有托盘的状态,适合数据完整性较好的场景(比如每个打印机都一定有三个托盘的记录):

SELECT Printer
FROM table1
WHERE Tray IN ('Tray1', 'Tray2', 'Tray3')
GROUP BY Printer
HAVING SUM(CASE WHEN Percentage != '0' THEN 1 ELSE 0 END) = 0
   AND COUNT(DISTINCT Tray) = 3;
  • 第一步WHERE Tray IN (...)先过滤出我们关心的三个托盘的记录;
  • GROUP BY Printer按打印机分组后,SUM(CASE...) = 0确保该分组下没有任何一个托盘的百分比非0;
  • COUNT(DISTINCT Tray) = 3是额外的严谨性校验,确保该打印机确实存在三个托盘的记录,避免出现某台打印机只有1-2个托盘且都是0的情况(如果你的业务里每个打印机必然有三个托盘,这部分可以去掉)。

方法二:NOT EXISTS 子查询

这种方法用反向排除的思路,找出「不存在任何一个目标托盘百分比非0」的打印机,逻辑更直观:

SELECT DISTINCT t1.Printer
FROM table1 t1
WHERE NOT EXISTS (
    SELECT 1
    FROM table1 t2
    WHERE t2.Printer = t1.Printer
      AND t2.Tray IN ('Tray1', 'Tray2', 'Tray3')
      AND t2.Percentage != '0'
)
AND EXISTS (
    SELECT 1
    FROM table1 t3
    WHERE t3.Printer = t1.Printer
      AND t3.Tray IN ('Tray1', 'Tray2', 'Tray3')
    GROUP BY t3.Printer
    HAVING COUNT(DISTINCT t3.Tray) = 3
);
  • 外层的NOT EXISTS会排除掉所有「存在至少一个目标托盘百分比非0」的打印机;
  • 第二个EXISTS同样是确保该打印机有完整的三个托盘记录,避免误判。

用这两种方法查询你的示例数据,都会只返回Printer_1,完全符合你的需求哦。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 09:54:31