Mam tabeli, który wygląda mniej więcej tak:SQL - liczenie wierszy o określonej wartości
id value
1 0
1 1
1 2
1 0
1 1
2 2
2 1
2 1
2 0
3 0
3 2
3 0
teraz za każdym id
chcę zliczyć liczbę wystąpień 0 i 1 oraz liczbę wystąpień dla że ID (wartość może być dowolną liczbą całkowitą), więc efekt końcowy powinien wyglądać mniej więcej tak:
id n0 n1 total
1 2 2 5
2 1 2 4
3 2 0 3
udało mi się pierwszy i ostatni wiersz z tym stwierdzeniem:
SELECT id, COUNT(*) FROM mytable GROUP BY id;
Ale jestem trochę zagubiony. Jakieś wskazówki, jak to osiągnąć bez wielkiego oświadczenia?
Słodko, nie wiedziałem nawet, że było "SUMA (warunek)"! – ryyst
@ryyst: Cóż, jest to sztuczka, która wykorzystuje fakt, że MySQL ocenia boolowskie wyniki wyrażeń warunkowych na 0, jeśli fałsz i 1 na true; więc przyjęcie "SUM" w każdej grupie daje liczbę tych rekordów, w których warunek jest prawdziwy. – eggyal
Możesz też być bardziej ekspresyjny i używać 'COUNT (CASE WHEN value = 0 THEN 1 END) AS n0, ..., ...', który będzie działał we wszystkich innych głównych DBMSs, ponieważ MySQL jest jedynym, który tworzy implicite konwersje boolowskie. Zobacz moje [pytanie tutaj] (http://stackoverflow.com/questions/11340540/conditional-counting-performance-differences-in-using-sum-vs-count), aby uzyskać więcej informacji. –