簡體   English   中英

如何在 MySQL 查詢中結合 WHERE 和 HAVING

[英]How to combine WHERE and HAVING in a MySQL query

我如何為 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 的所有行的總工資 + 總材料小於零的記錄。 例如; 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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM