2 Stimmen

SQL - Bedingung für Feldwert?

Ich möchte wissen, ob ich einige Wert gegen eine Bedingung in jeder zurückgegebenen Zeile irgendwie in der Abfrage testen kann?

z.B.: Ich habe Spalten:

X   Y   Z
-1   1  2
2   2   -1
3   -1  3

Ich möchte avg() für alle Werte außer für -1 verwenden. Ich kann nicht where<> -1 verwenden, da jede Zeile diesen Wert einmal enthält.

2voto

Mark Byers Punkte 761508

Verwenden Sie WHERE, um die Werte herauszufiltern, die Sie nicht in den Durchschnitt aufnehmen wollen, z. B. um alle Zahlen außer -1 in den Durchschnitt aufzunehmen:

SELECT
    (SELECT AVG(x) FROM table1 WHERE x >= 0) AS x,
    (SELECT AVG(y) FROM table1 WHERE y >= 0) AS y,
    (SELECT AVG(z) FROM table1 WHERE z >= 0) AS z

Beachten Sie, dass, wenn Sie wirklich alle Zahlen außer -1 einschließen wollen, wie Sie in Ihrer Frage sagten, dann sollten Sie die WHERE-Klausel ändern in x <> -1 aber ich bezweifle, dass Sie das wollen.

2voto

Anax Punkte 8732

Versuchen Sie das Folgende:

SELECT AVG(IF(x <> -1, x, NULL)) AS avgX,
       AVG(IF(y <> -1, y, NULL)) AS avgY,
       AVG(IF(z <> -1, x, NULL)) AS avgZ
FROM mytable;

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