Mam tabelę z wartościami całkowitymi i muszę zapytać o sumę kolumn:
id, A, B, C
1, 21, 32, null
2, 9, 0, 124
3, null, null, 6
SELECT * FROM tbl WHERE B+C > 50
To nie działa, ponieważ dodatki z wartością null są niedozwolone. Obecna implementacja polega na ustawieniu wszystkich wartości null na 0 i dodaniu oddzielnej kolumny dla każdej kolumny do określenia, czy 0 rzeczywiście oznacza zero:
id, A, B, C, A_null, B_null, C_null
1, 21, 32, 0, false, false, true
2, 9, 0, 124, false, false, false
3, 0, 0, 6, true, true, false
Nie sądzę, że jest to bardzo eleganckie i chciałbym skorzystać z funkcji ifnull:
SELECT * FROM tbl WHERE ifnull(B,0)+ifnull(C,0) > 50
Czy wiąże się to z dużą karą za wyniki lub innymi wadami?
Tabela ma wiele milionów wierszy.
Odpowiedzi:
0 dla odpowiedzi № 1Zawsze możesz użyć
isnull(column_name ,0)
Spowoduje to wstawienie 0 do wartości pustych, a następnie pozwoli je SUMOWAĆ.
Różnica między ifnull a isnull - ifnull przyjmuje dwa argumenty; jeden dla, jeśli wartość jest zerowa i jedna dla, jeśli nie jest.
isnull po prostu wstawia wartość do wszystkich wartości pustych, które moim zdaniem byłyby bardziej proste dla tego pytania.