2009-08-21 16 views
11

W porządku, więc próbuję wykonać różne operacje COUNT() w tej samej tabeli na podstawie różnych kryteriów bez zagnieżdżonych zapytań (wydajności) lub podzapytań (tak można przekształcić w widok). czy to możliwe?mySQL: wiele obiektów COUNT() na podstawie różnych kryteriów

Przykład: tabela ma kolumnę z datą - zapytanie powinno być w stanie wygenerować liczbę wierszy przed & po stałej dacie.

Odpowiedz

28

Używasz MySQL, więc możesz skorzystać z jego funkcji, której wartością logiczną jest 0 dla wartości false i 1 dla wartości true. Numer SUM() z 1 jest równy COUNT(), gdzie wyrażenie jest prawdziwe.

SELECT SUM(date_column < '2009-08-21') AS prior_to_date, 
     SUM(date_column > '2009-08-21') AS after_date 
FROM MyTable; 

PS: Nie próbuj tego w innych marek bazy danych, przy poszanowaniu SQL standardowe zachowanie, to znaczy wyrażenie logiczne daje wartość logiczną, a nie 0 lub 1 całkowitą.

+0

Nice - to działa świetnie. W innych bazach danych, które używają składni SQL, przypuszczam, że posiadanie IF wewnątrz SUM powracającego 1 lub 0, biorąc pod uwagę warunek powinien również działać. – dborba

+1

Tak. Ale jeśli chcesz być najbardziej przenośny, użyj wyrażeń 'CASE'. Nie ma 'IF()' w standardowym SQL. –

+0

Próbowałem z wieloma i oddzielnymi. Problem, który znalazłem, gdy umieściłem oddzielną instrukcję select z niezbędną klauzulą ​​where, wtedy mysql używa indeksu, ale po połączeniu nie używa indeksu. Sprawdzono za pomocą objaśnienia. –

Powiązane problemy