Mam tabeli jak poniżej:MySQL odjąć dwie kolumny count
client msg_type msg_body id
------ -------- -------- ---
123 typeA success abc
123 typeB success abc
456 typeA success abc
456 typeB failure abc
123 typeA success abc
123 typeA success abc
789 typeA success def
789 typeB success def
itp
chciałbym wyjście tak:
client diff id
------ ---- ---
123 2 abc
456 1 abc
789 0 def
gdzie diff
jest liczba typeA:success
wiadomości - typeB:success
wiadomości. Mogę liczyć na sukces TypeA używając coś takiego:
select client, count(*) from mytable
where msg_type="typeA" and msg_body="success"
Jednak nie mogę dowiedzieć się, jak umieścić inną liczbę tam (na TypeB), a także odejmować. Próbowałem coś takiego:
select client, count(*) from mytable
where msg_type="typeA" and msg_body="success" - count(*)
from mytable where msg_type="typeB" and msg_body="success"
Ale oczywiście to nie działa, albo nie będę tu pytać. :) Jakakolwiek rada?
Edytuj: dodano kolejną kolumnę. Próbowałem dwie podane sugestie, ale wydaje się, że zwracają wyniki tylko dla jednego z identyfikatorów, a nie dla obu.
Edit # 2: Próbowałem owijania zapytania SELECT z:
select id, count(*) from (select ...) as anothertable where count_a_minus_count_b = 0;
Miałem nadzieję wyjście byłoby jak:
id count
--- -----
abc 2
def 1
gdzie liczba to liczba klientów, gdy różnica między typeA: success i typeB: success to 0.
Re: „Starałem dwie podane sugestie, ale wydaje się, że tylko zwracają wyniki jeden z nich, nie oba ": Wszystkie odpowiedzi pokazały, jak obliczyć różnicę między zliczeniami; i myślę, że wszyscy byli o tym całkiem jasni. Zamiast po prostu próbować sugestii, nie czytając ich, polecam ci próbę uczenia się od nich i zadawania pytań, jeśli istnieją części, których nie rozumiesz. : -/ – ruakh
@ruakh Myślałem, że rozumiem zapytania, które prowadziłem, dlatego próbowałem różnych rzeczy. Myślę, że dostałem to z: wybierz identyfikator, policz (*) z (SELECT id, klient, \t COUNT (CASE WHEN msg_type = 'typeA' THEN 1 END) \t - COUNT (CASE WHEN msg_type = 'typeB' TO 1 End) jako count_a_minus_count_b \t Z mojatabela \t gDZIE msg_body = 'sukcesu' \t GROUP \t według klienta), a sometable gdzie count_a_minus_count_b <1 grupa o id; – user2406467
powiązane z sumą http://stackoverflow.com/questions/826365/how-do-i-add-two-count-results-together –