Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

sql problem, Moze li sa jednim upitom?

[es] :: Baze podataka :: sql problem, Moze li sa jednim upitom?

[ Pregleda: 3920 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Bojann
Zrenjanin

Član broj: 13255
Poruke: 217
*.ptt.yu



Profil

icon sql problem, Moze li sa jednim upitom?19.05.2004. u 01:10 - pre 241 meseci
U pitanju je jedan sql problem.
Ovako:
Postoji jedna tabela sa poljima npr:
-Ime
-uplatio(logicki tip true/false)
-datum

Potrebno je da kao rezultat upita dobijem grupisano po imenu, podatke za svakog coveka, koliko je puta uplatio(odnosno kad je polje uplatio=true),ukupan broj pojavljivanja coveka(i kad je uplatio=true i kad je false) i procenat kad je uplata=true.

Konkretno na primeru:

ime uplatio=true ukupno(uplatio je bilo sta) procenat

Pera 5 10 50%
Sima 4 6 66%
Maja 5 8 62,5%

Da li je ovako nesto moguce sa jednim upitom. Problem je u sledecem. Ako grupisem podatke po imenu sto svakako treba i postavim uslov "where uplatio=true", tada broji samo te slucajeve a ukupne ne broji. Zato i pitam da li je ovo moguce jednim upitom i kako?

 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at

Sajt: www.baze-podataka.net


+2 Profil

icon Re: sql problem, Moze li sa jednim upitom?19.05.2004. u 03:07 - pre 241 meseci
Ako se radi o MySQL bazi (verzija min. 4.1), onda bi se moglo uraditi pomocu podupita (subqueries):
Code:
SELECT t1.Ime, t2.num AS Uplaceno, t3.num2 AS Uplatnica, (t2.num/t3.num2)*100 AS '%' FROM
uplate AS t1,
(SELECT Ime, COUNT(*) AS num
FROM uplate
WHERE uplatio=TRUE
GROUP BY Ime
) AS t2,
(SELECT Ime, COUNT(*) AS num2
FROM uplate
GROUP BY Ime
) AS t3
WHERE t1.Ime=t2.Ime AND t1.Ime = t3.Ime
GROUP BY t1.Ime;


Je li to rjesenje koje ti treba? Ako nije, trazicemo drugo kad se naspavam
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

Bojann
Zrenjanin

Član broj: 13255
Poruke: 217
*.ptt.yu



Profil

icon Re: sql problem, Moze li sa jednim upitom?19.05.2004. u 14:37 - pre 241 meseci
Citat:
StRiPy:
Ako se radi o MySQL bazi (verzija min. 4.1), onda bi se moglo uraditi pomocu podupita (subqueries):
Code:
SELECT t1.Ime, t2.num AS Uplaceno, t3.num2 AS Uplatnica, (t2.num/t3.num2)*100 AS '%' FROM
uplate AS t1,
(SELECT Ime, COUNT(*) AS num
FROM uplate
WHERE uplatio=TRUE
GROUP BY Ime
) AS t2,
(SELECT Ime, COUNT(*) AS num2
FROM uplate
GROUP BY Ime
) AS t3
WHERE t1.Ime=t2.Ime AND t1.Ime = t3.Ime
GROUP BY t1.Ime;


Je li to rjesenje koje ti treba? Ako nije, trazicemo drugo kad se naspavam :)





Ja radim sa delpijem i paradox7 bazom. Znaci koristim bde komponente i u odeljku TQuery.sql treba da unesem kod.
Probao ovaj tvoj predlog, ali on meni prijavi gresku cim postavim podupit u odeljak from (nisam zano da ovako nesto uopste i moze). Probao sam na nekom prostom primeru i izgleda da stvarno ne moze da se u odeljak from ubaci podupit, bar ne moze u TQuery.sql
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at

Sajt: www.baze-podataka.net


+2 Profil

icon Re: sql problem, Moze li sa jednim upitom?19.05.2004. u 15:44 - pre 241 meseci
Tako sam i mislio, da se radi o drugoj bazi No, nema veze.
Nisam radio nikako sa Paradoxom, ali pokusaj ovu metodu (u slucaju da Paradox podrzava CASE ...):

Code:
SELECT Ime,sum(case when uplatio=TRUE then 1 else 0 end) as Uplaceno,
    count(*) AS Ukupno,(sum(case when uplatio=TRUE then 1 else 0 end)/count(*))*100 AS "%"
FROM uplate
GROUP BY Ime;


Inace, ovo rjesenje radi odlicno i u MySQL-u. Bolje je od onog gore koje sam napisao nabrzaka u 4 ujutro
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

_owl_

Član broj: 318
Poruke: 1043
*.drenik.net



+3 Profil

icon Re: sql problem, Moze li sa jednim upitom?19.05.2004. u 19:00 - pre 241 meseci
Samo da napomenem da je po SQL-u neophodno da u GROUP BY klauzuli imas sva polja po kojima grupises pa i ona koja sadrze agregatne funkcije tj za dati primer bi bilo
Code:

GROUP BY Ime,sum(case when uplatio=TRUE then 1 else 0 end),
    count(*), (sum(case when uplatio=TRUE then 1 else 0 end)/count(*))*100

Owl
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
*.dialup.neobee.net.

Sajt: www.novikorisnik.net


+5 Profil

icon Re: sql problem, Moze li sa jednim upitom?19.05.2004. u 19:41 - pre 241 meseci
??? ili sam totalno zarđao? odo' na spavanje...
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at

Sajt: www.baze-podataka.net


+2 Profil

icon Re: sql problem, Moze li sa jednim upitom?19.05.2004. u 20:48 - pre 241 meseci
@_owl_: Da, u neku ruku si u pravu. Treba se drzati SQL standarda.
Medjutim, MySQL ima zanimljive karakteristike u vezi GROUP BY:
http://dev.mysql.com/doc/mysql/en/GROUP-BY-hidden-fields.html

Copy/paste jednog dijela teksta sa gorenavedene adrese:
Citat:
MySQL extends the use of GROUP BY so that you can use columns or calculations in the SELECT list that don't appear in the GROUP BY clause. This stands for any possible value for this group. You can use this to get better performance by avoiding sorting and grouping on unnecessary items. For example, you don't need to group on customer.name in the following query:

mysql> SELECT order.custid, customer.name, MAX(payments)
-> FROM order,customer
-> WHERE order.custid = customer.custid
-> GROUP BY order.custid;

In standard SQL, you would have to add customer.name to the GROUP BY clause. In MySQL, the name is redundant if you don't run in ANSI mode.

Do not use this feature if the columns you omit from the GROUP BY part are not unique in the group! You will get unpredictable results.
...

Note that if you are using MySQL 3.22 (or earlier) or if you are trying to follow standard SQL, you can't use expressions in GROUP BY or ORDER BY clauses. You can work around this limitation by using an alias for the expression:

mysql> SELECT id,FLOOR(value/100) AS val FROM tbl_name
-> GROUP BY id, val ORDER BY val;

In MySQL 3.23 and up, aliases are unnecessary. You can use expressions in GROUP BY and ORDER BY clauses. For example:

mysql> SELECT id, FLOOR(value/100) FROM tbl_name ORDER BY RAND();



@noviKorisnik: Sta se desilo?
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

noviKorisnik
Dejan Katašić
Novi Sad

Član broj: 13216
Poruke: 4533
194.247.222.*

Sajt: www.novikorisnik.net


+5 Profil

icon Re: sql problem, Moze li sa jednim upitom?20.05.2004. u 08:22 - pre 241 meseci
Prvo me je zbunilo pominjanje korištenja agregatnih funkcija u GROUP BY klauzuli.
Drugo - nije mi jasno koje bi bilo značenje sledećeg q
Code:
SELECT Ime, count(*)
FROM Uplate
GROUP BY Ime, count(*)

- šta traži count(*) u GROUP BY? Zar se count(*) ne izračunava na osnovu grupisanja po imenu?
 
Odgovor na temu

Dejan Topalovic
Dejan Topalović
Senior Oracle DBA & Senior PL/SQL
Developer, Erste Sparinvest (Erste
Bank), Vienna, Austria
Vienna

Član broj: 635
Poruke: 1374
*.1.14.vie.surfer.at

Sajt: www.baze-podataka.net


+2 Profil

icon Re: sql problem, Moze li sa jednim upitom?20.05.2004. u 10:08 - pre 241 meseci
A dobro, to se mozda _owl_ malo zeznuo Zezne se svako katkad. Pogotovo ja kad sam nenaspavan
Naravno da ne ide count(*) u GROUP BY clause.
Blog - baze podataka
---------------------
Oracle OCP DBA (9i & 10g)
Oracle Database: SQL Certified Expert
Oracle OCP Developer
Certified MySQL DBA
 
Odgovor na temu

[es] :: Baze podataka :: sql problem, Moze li sa jednim upitom?

[ Pregleda: 3920 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.