2013-03-21 14 views
5

szukałem wokół, ale nie mógł znaleźć odpowiedź Potrzebuję kwerendy powrotu 2 grup wartości jako nazwy pól na podstawie wartości w tym samym polumysql count i grupowe wielu wartości w tej samej dziedzinie

przykład mam tabeli

NAME, VALUE 
name1, 2 
name1, 2 
name1, 3 
name1, 4 
name2, 2 
name2, 2 
name2, 3 
name2, 4

teraz chcę liczyć wartości i grupa 2 i 3 w jednej grupie i 4 wartości w innej grupie, więc mój wynik będzie wyglądać następująco

NAME, GRP1_COUNT, GRP2_COUNT 
name1, 3, 1 
name2, 3, 1

Próbowałem JOIN i UNION bez większego powodzenia jakiejkolwiek pomocy ceniona

+0

wyszukiwania dla "wierszy MySQL do kolumny" i "mysql pivot" – Kermit

Odpowiedz

5

Spróbuj

SELECT 
name, 
sum(case when value=2 or value=3 then 1 else 0 end), 
sum(case when value=4 then 1 else 0 end) 
FROM YourTable 
GROUP BY name 
+1

@GordonLinoff Nie tak trudno zrobić, publikując odpowiedź tylko kodu. Nie, że ta odpowiedź nie jest godna uwagi, ale porównanie jest po prostu nie fair – Lamak

+0

@ Lamak. . . kiedy napisałem ten komentarz, obie odpowiedzi zawierały tylko kod. Druga odpowiedź została zmodyfikowana i znacznie poprawiona dzięki wyjaśnieniu (jak to zwykle bywa w przypadku bluefeet). –

+2

Po prostu cieszę się, że moja pierwsza odpowiedź na tej stronie (lub jakiejkolwiek takiej stronie) ma (miał) ten sam kod z ekspertem! –

14

MySQL nie posiada obrotowy funkcji więc trzeba będzie przekształcić dane przy użyciu funkcji zagregowanego z CASE wyrażenie. Dla tego typu obliczeń można użyć jednej COUNT lub SUM:

select name, 
    sum(case when value in (2,3) then 1 else 0 end) GRP1_COUNT, 
    sum(case when value = 4 then 1 else 0 end) GRP2_COUNT 
from yourtable 
group by name 

Zobacz SQL Fiddle with Demo

COUNT wersja:

select name, 
    count(case when value in (2,3) then VALUE end) GRP1_COUNT, 
    count(case when value = 4 then VALUE end) GRP2_COUNT 
from yourtable 
group by name 

Zobacz SQL Fiddle with Demo

+0

Czy istnieje jakiś lepszy sposób? Nie wliczając wartości hardcorded. – Deckard

+0

@Deckard tak możesz użyć przygotowanej instrukcji do wykonania dynamicznego sql – Taryn

Powiązane problemy