[ KeyboardSound @ 28.11.2003. 09:49 ] @
Radim sa php/Mysql/Apache

Tabela u bazi ima strukturu:

Korisnik Uplata

Pero 170,00
Milan 150,00
Dragan 44,20
Milan 50,00
Dragan 10,00
Nenad 350,00

Kako da definisem sql upit da mi vrati sve korisnike i njihove sume uplata za slucaj kada je suma uplata veca od npr. 180,00
Ono sto mi treba kao izlaz je:
Milan 200,00
Nenad 350,00

Moram li koristiti TEMPORARY TABLE?

Pozdrav
[ broker @ 28.11.2003. 10:55 ] @
Ne treba ti pomocna tabela. Koristi HAVING klauzulu u SELECT upitu umesto WHERE

RAzliak izmedju WHERE i HAVING je u tome sto se WHERE uslov primenjuje na slogove izvornih datoteka koje su ukljucene u upit pre izbora sloga a HAVING se primenjuje na rezultat upita, dakle kada je izbor slogova vec izvrsen.

U HAVING mozes da stavis uslove koji ukljucuju i polja napravljena samim upitom a koja ne postoje u izvornim datotekama.
[ noviKorisnik @ 28.11.2003. 11:13 ] @
...što bi u ovom slučaju bilo otprilike (u $tabela je ime tabele):

SELECT Korisnik, SUM(Uplata) AS UkupnoUplata
FROM $tabela
HAVING UkupnoUplata > 180
[ KeyboardSound @ 28.11.2003. 12:07 ] @
To je to i radi ali sad moram malo zakomplikovati:

U tabeli imam i trecu kolonu pokrice_uplate (moguce vrijednosti ima i nema), kako cu to isto da postignem ali npr. samo za validne uplate.

Pokusao sam sa:

SELECT Korisnik, SUM(Uplata) AS UkupnoUplata
FROM $tabela
HAVING UkupnoUplata > 180 and pokrice_uplate='ima'
ali mi prijavljuje gresku:
Unknown column pokrice_uplate in 'having clause'

Hvala puno za ovo do sad
[ broker @ 28.11.2003. 12:12 ] @
Dejane, ja mu namerno nisam dao gotov upit da bi morao da pogledaj malo u prirucnik za sql. A iz pitanja koje je usledilo jasno je da nije ni privirio u njega. Nije bas pametno trositi vreme na nekoga ko nije odvojio vreme ni da prouci najosnovije stvari oko SELECT upita.

Za HAVING sam mu progledao kroz prste, jer ljudi cesto previde tu komandu.
[ noviKorisnik @ 28.11.2003. 12:46 ] @
OK, slažem se da je bolje da radimo edukativno nego da se daju instant rešenja.

keyboardSound, pročitaj još jednom
Citat:
Razlika izmedju WHERE i HAVING je u tome sto se WHERE uslov primenjuje na slogove izvornih datoteka koje su ukljucene u upit pre izbora sloga a HAVING se primenjuje na rezultat upita, dakle kada je izbor slogova vec izvrsen.
Trebalo bi da je dovoljno. Molim te samo da objaviš rešenje, ako ti nije problem.
[ KeyboardSound @ 28.11.2003. 12:46 ] @

...here I am to help...
[ KeyboardSound @ 28.11.2003. 12:50 ] @
Dobro, dobro ljudi pa samo pitam

SELECT Korisnik, SUM(Uplata) AS UkupnoUplata
FROM $tabela WHERE pokrice_uplate='ima' group by korisnik
HAVING UkupnoUplata > 180
[ markom @ 28.11.2003. 12:53 ] @
Citat:
broker:
Dejane, ja mu namerno nisam dao gotov upit da bi morao da pogledaj malo u prirucnik za sql. A iz pitanja koje je usledilo jasno je da nije ni privirio u njega. Nije bas pametno trositi vreme na nekoga ko nije odvojio vreme ni da prouci najosnovije stvari oko SELECT upita.

Za HAVING sam mu progledao kroz prste, jer ljudi cesto previde tu komandu.


Ovo je užasno bezobrazan komentar, koji je recimo mene uvredio. Ja radim sa SQL-om malo-po-malo već više od nekoliko godina i HAVING klauzula je za mene bila otkrovenje. <offtopic>Smatraj da od mene ubuduće nećeš dobiti nikakav smislen odgovor vezan za bilo šta stručno - zaboga, sve piše u dokumentaciji</offtopic>.

Back to subject. HAVING ne radi bez GROUP BY u MySQL-u.

Citat:
U tabeli imam i trecu kolonu pokrice_uplate (moguce vrijednosti ima i nema), kako cu to isto da postignem ali npr. samo za validne uplate.


Code:

SELECT
  korisnik,
  sum(uplata) AS suma
FROM
  tablea
WHERE
  pokrice = 'ima'
GROUP BY
  korisnik
HAVING
  suma > 180


Ono iznad bi trebalo da radi.

Marko.
[ noviKorisnik @ 28.11.2003. 12:58 ] @
Marko, pogledaj malo bolje i vidi da je kritika urodila plodom - KeyboardSound je sam rešio problem.
[ _owl_ @ 28.11.2003. 18:13 ] @
Citat:
mdm:
Back to subject. HAVING ne radi bez GROUP BY u MySQL-u.

Gresis ovaj silno gresis sinko. U slucaju da se SELECT upit izvrsava bez GROUP BY klauzule onda se ceo rezultat posmatra kao jedna grupa i na njega se primenjuje uslov iz HAVING klauzule (ovako je po SQL standardu, a takodje je podrzano i u MySQL-u). Primer:
Code:

CREATE TABLE rang (
  idrang int(11) NOT NULL default '0',
  ime varchar(255) NOT NULL default '',
  PRIMARY KEY  (idrang)
) ENGINE=MyISAM;
INSERT INTO rang VALUES (1, '1');
INSERT INTO rang VALUES (2, '2');
INSERT INTO rang VALUES (3, '3');
INSERT INTO rang VALUES (4, '4');
INSERT INTO rang VALUES (5, '5');
SELECT idrang FROM `rang` HAVING idrang>3

Kao sto vidis radi (MySQL 3.23.56).
[ broker @ 29.11.2003. 00:00 ] @
Citat:
mdm:
<offtopic>Smatraj da od mene ubuduće nećeš dobiti nikakav smislen odgovor vezan za bilo šta stručno - zaboga, sve piše u dokumentaciji</offtopic>.


Nema problema Marko, zato cu ja tebi svakako pomoci kad mogu jer znam da ces da pitas nesto sto nisi uspeo da resis i pored svojski ulozenog truda i nakon sto si proucio dokumentaciju.

U svakm slucjau ja sam momku pomogao: dao sam mu dovoljno podataka da SAM lako dodje do resenja. Nekazu Kinezi za dzabe: ako ti prosjak trazi da mu das ribu ti ga nauci da peca.