[ anaxim @ 19.03.2009. 19:37 ] @
U tabeli postoji jedna kolona (npr. kolona_1) koja moze imati dve vrednosti (npr. 1 i 2). Da li je moguce jednim upitom prebrojati u koliko redova kolona_1 ima vrednost 1 a u koliko vrednost 2? Ako je moguce kako bi isla sintaksa tog upita?
Pozzz
[ Nikola Poša @ 19.03.2009. 19:54 ] @
Nadam se da ta tabela ima još neko polje, npr. id, pa bi to onda moglo da se prebroji ovako:
Code:

SELECT COUNT(id)
FROM tabela
WHERE kolona_1 = 1
UNION 
SELECT COUNT(id)
FROM tabela
WHERE kolona_1 = 2

Sigurno ima neko bolje rešenje, al' meni je ovo prvo palo napamet. Tako ćeš dobiti samo dva reda u rezultatu upita, u prvom će biti broj "jedinica", u drugom broj "dvojki". U slučaju da je u toj koloni isti broj vrednosti jedinica i dvojki, upit će vratiti samo jedan red.
[ Tudfa @ 19.03.2009. 22:02 ] @
Evo i još jednog mogućeg rešenja:

Code:

SELECT
SUM(if(kolona_1 = 1,1,0)) as jedinice,
SUM(if(kolona_1 = 2,1,0)) as dvojke
FROM tabela


[ bogdan.kecman @ 19.03.2009. 22:12 ] @

Tudfa, izbegavaj takvo resenje ... ono radi, ali takav upit ne moze da koristi index tako da, ako je kolona_1 indexirana i ako je set od dve vrednosti nikolino resenje je iz 4 koraka a tvoje radi full table scan.

jos jedno resenje
Code:

SELECT (SELECT COUNT(*) FROM t1 WHERE kolona_1 = 1) , (SELECT COUNT(*) FROM t1 WHERE kolona_1 = 2);


[ anaxim @ 19.03.2009. 23:12 ] @
Ima tabela i id polje , nego sam to samo uzeo kao primer. Thx za odgovore stvarno ste mi pomogli.
Pozz
[ Tudfa @ 19.03.2009. 23:51 ] @
@bogdan.kecman

Hvala na hintu...

I hteo bih ovo prilikom da kazem svaka čast na postovima, stvarno daju doprinos kvalitetu MySQL foruma i nadam se da ce tako biti i ubuduće.





[ bantu @ 20.03.2009. 07:29 ] @
Evo jednog riješenja možda nije toliko brzo kao ova predhodna, ali mislim da je dobro ako ima više različitih vrijednosti u koloni.

Code:


SELECT GROUP_CONCAT(broj SEPARATOR ' ') as spojeno
FROM (SELECT COUNT(*) AS broj
      FROM t1
      GROUP BY kolona_1
      ORDER BY kolona_1) AS tabela;

[ bantu @ 20.03.2009. 07:40 ] @
Mada ovo i nije baš ono što si tražio jer ovaj upit vrati spojene vrijednosti u jednoj koloni, a tebi to pretpostavljam ne treba.
Pozz.
[ bogdan.kecman @ 20.03.2009. 11:46 ] @
bantu, to je cool ideja :) .... mozes da ides na group_concat('x', ' ') pa onda brojis x-ove posle .. (ili strlen / 2) ... obrati samo paznju na server varijablu za max velicinu group_concat-a posto ako ima puno slogova ...
[ bantu @ 20.03.2009. 12:25 ] @
Hvala, to mi je onako brzinski palo na pamet, mada, ja bi uvjek koristio:
Code:

SELECT kolona_1, COUNT(*)
FROM t1
GROUP BY kolona_1
ORDER BY kolona_1

I onada bi na brzinu "protrčao" kroz ResultSet bilo u Stored proceduri ili u nekom od programskih jezika i uradio sa tim vrijednostima šta mi već treba. Ionako mi ti podaci trebaju za neku daljnu obradu bilo u mysql-u ili nečemu trećem.