3 Stimmen

Wie erhält man einen Bereich in einer MySQL If-Anweisung?

Ich versuche, eine Auswahl zu treffen, die die Auszahlungen für Partner berechnet.

Mein Ansatz ist ziemlich einfach.

SELECT
 month(payments.timestmap)
,sum(if(payments.amount>=29.95,4,0)) As Tier4
,sum(if(payments.amount>=24.95<=29.94,3,0)) As Tier3
,sum(if(payments.amount>=19.95<=24.94,2,0)) As Tier2
FROM payments
GROUP BY month(payments.timestamp)

Das obige funktioniert nicht, weil MySQL den zweiten Teil der Bedingung nicht auswertet. Übrigens verursacht es keinen Syntaxfehler und der Select gibt Ergebnisse zurück.

Vor dem oben genannten habe ich versucht, was ich annahm, würde funktionieren wie " amount between 24.94 AND 29.94 "Das führte zu einem Fehler. Also habe ich es mit " amount >= 24.94 AND <= 29.94 "

So ist es möglich, einen Bereich Vergleich mit IF in MySql haben?

7voto

ConroyP Punkte 39832

Der zweite Teil des Ausdrucks wird ausgewertet, wenn Sie AND -

SELECT
 month(payments.timestmap)
,sum(if(payments.amount>=29.95,4,0)) As Tier4
,sum(if(payments.amount>=24.95 AND payments.amount<=29.94,3,0)) As Tier3
,sum(if(payments.amount>=19.95 AND payments.amount<=24.94,2,0)) As Tier2
FROM payments
GROUP BY month(payments.timestamp)

Ich bin mir nicht ganz sicher, warum die between Klausel hat bei Ihnen nicht funktioniert, aber die obige sollte ausreichen.

3voto

Thomas Owens Punkte 110966

Es gibt immer die ZWISCHEN ... UND ... Operator in MySQL.

1voto

KernelM Punkte 8596

Welche Fehlermeldung haben Sie bei Ihrem ersten Versuch erhalten? Es sollte auf jeden Fall funktionieren. Beachten Sie jedoch, dass die zweite Form, die Sie haben, eine falsche Syntax aufweist. Sie sollte lauten amount >= 24.94 and amount <= 29.94 .

0 Stimmen

Sie und PConroy haben Recht, ich habe mich dumm angestellt. Ich sollte den Spaltennamen als Teil der 2. Bedingung hinzugefügt haben.

1voto

geilt Punkte 797
SELECT
month( payments.timestamp )
,sum( if( payments.amount >= 29.95, 4, 0 ) )  As Tier4
,sum( if( payments.amount BETWEEN 24.95 AND 29.94, 3, 0 ) ) As Tier3
,sum( if( payments.amount BETWEEN 19.95 AND 24.94, 2, 0 ) ) As Tier2
FROM payments
GROUP BY month( payments.timestamp )

Das sollte auch funktionieren. Ich habe sowohl mit BETWEEN als auch mit > < getestet, um sicherzustellen, dass sie in einer meiner Abfragen gleich funktionieren. Also ja, beide funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X