gpt4 book ai didi

mysql - 如何在 MySQL 查询中组合 WHERE 和 HAVING

转载 作者:行者123 更新时间:2023-11-28 23:25:42 24 4
gpt4 key购买 nike

如何为 MySQL 编写查询以过滤掉总薪酬小于零的地方。我尝试过使用“HAVING”的不同命令,但我无法找出正确的语法。

这是我的命令:

SELECT tickets.idno, tickets.PAY, tickets.MATERIAL
FROM tickets
WHERE ( tickets.PAY <> 0 OR tickets.MATERIAL <> 0 ) AND tickets.DISTRICT = 'HO' AND tickets.DATEPAID IS NULL
ORDER BY tickets.NAME

有了这个结果集:

HO0045  -140    0
HO2203 -45 0
HO2411 -5 0
HO2411 20 0
HO3448 -156 0
HO2519 2000 0
HO0075 -300 0
HO1669 -55 0
HO2666 -200 0
HO2666 -200 0
HO3447 -400 0
HO3447 400 0

这是我现在得到的结果,但它需要消除那些给定 IDNO 的所有行的总工资 + 总 Material 小于零的记录。例如; HO2411 和 HO2519 的所有行都应该出现,但其余行不会出现。

最佳答案

HAVING 旨在过滤掉整个组,但要做到这一点,您需要使用 GROUP BY 减少查询。但不幸的是,您无法在过滤组后反转分组操作。

所以你必须做一个子查询来过滤组,然后 JOIN 结果返回到表中以找到具有相应 idno 的行:

SELECT t.idno, t.PAY, t.MATERIAL
FROM tickets AS t
INNER JOIN (
SELECT idno, SUM(PAY) AS PAY, SUM(MATERIAL) AS MATERIAL
FROM tickets
GROUP BY idno
HAVING PAY + MATERIAL < 0
) AS total USING (idno)
WHERE t.DISTRICT = 'HO' AND t.DATEPAID IS NULL
ORDER BY t.NAME;

关于mysql - 如何在 MySQL 查询中组合 WHERE 和 HAVING,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39459691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com