ERKLÄREN SIE SELECT COUNT(*) AUS BILL_PATIENT_BILL ALS fetchInfo WO IF(fetchInfo.BILL_TYPE='OP' UND fetchInfo.BILL_CATEGORY=0, fetchInfo.DUE_AMOUNT != 0, TRUE)
Ihr IF macht keinen Sinn. Was es macht, ist:
- Wenn BILL_TYPE='OP',
- und BILL_CATEGORY=0,
- dann ist die WHERE-Klausel wahr, wenn DUE_AMOUNT != 0
- sonst ist die WHERE-Klausel immer wahr.
Aber egal, Sie brauchen es nicht. Sie können die Abfrage wie folgt neu schreiben und De Morgan verwenden
ERKLÄREN SIE SELECT COUNT(*)
AUS BILL_PATIENT_BILL ALS fetchInfo
WO (fetchInfo.BILL_TYPE='OP'
UND fetchInfo.BILL_CATEGORY=0
UND fetchInfo.DUE_AMOUNT != 0)
ODER fetchInfo.BILL_TYPE<>'OP'
ODER fetchInfo.BILL_CATEGORY=0
Sie sollten einen Index auf (BILL_TYPE, BILL_CATEGORY, DUE_AMOUNT) haben, aber selbst dann könnte es aufgrund der OR-Klauseln entscheiden, den Index nicht zu verwenden. In diesem Fall versuchen Sie es mit einer neuen Schreibweise als Union:
SELECT COUNT(*)
AUS BILL_PATIENT_BILL ALS fetchInfo
WO (fetchInfo.BILL_TYPE='OP'
UND fetchInfo.BILL_CATEGORY=0
UND fetchInfo.DUE_AMOUNT != 0)
UNION ALLES
SELECT COUNT(*)
AUS BILL_PATIENT_BILL ALS fetchInfo
WO fetchInfo.BILL_TYPE<>'OP'
UNION ALLES
SELECT COUNT(*)
AUS BILL_PATIENT_BILL ALS fetchInfo
WO fetchInfo.BILL_CATEGORY=0
Sie können eine SUMME durchführen, um diese hinzuzufügen.
Weil Sie tatsächlich alle Werte der Spalten akzeptieren, benötigen Sie vielleicht nicht einmal eine WHERE-Klausel...
ERKLÄREN SIE SELECT COUNT(
IF(fetchInfo.BILL_TYPE='OP'
UND fetchInfo.BILL_CATEGORY=0
UND fetchInfo.DUE_AMOUNT != 0,
1,
0))
AUS BILL_PATIENT_BILL ALS fetchInfo