Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 6 odgovora
  • 5.673 pregleda

Najnovija ↓

funkcije i GROUP BY 17.12.2004. u 09:57 · pre 266 meseci #1
Pozdrav,
Imam sledeći problem:
Code:

SELECT datepart(year, p.Datum) as Godina,
sum(p.Kolicina) as Ukupno,
--...
dbo.Funkcija(datepart(year, p.Datum)) as Rezultat
FROM Promet p
where p.ProizvodID in (select ProizvodID from Pips04..KorisnickaGrupaProizvodaStavke where KorisnickaGrupaProizvodaID = @grupaID)
and (datepart(year, p.Datum) = @god or @god = 0)
GROUP BY datepart(year, p.Datum) ORDER BY datepart(year, p.Datum)
end


Ovaj query mi kaže 'p.Datum is invalid in the select list because it is not included in the group by list'. Problem je u tome što sam datepart(year, p.Datum) proslijedio kao parametar funkciji. Ako izostavim funkciju, query radi sasvim normalno. Ima li neko ideju koja ne podrazumijeva izostavljanje funkcije?
Re: funkcije i GROUP BY 17.12.2004. u 17:34 · pre 266 meseci #3
da, to sam otkrio oko 2 minuta posle postavljanja ovog posta :) hvala
Re: funkcije i GROUP BY 20.12.2011. u 12:24 · pre 180 meseci #4
sorry za ozivljavanje ovako stare teme, ali da ne otvaram novu.

Da li ima neko volje da mi najprostijim primerom objasni cemu sluzi group by?

Guglam, i vidim primere, ali i dalje ne mogu da shvatim.

Re: funkcije i GROUP BY 20.12.2011. u 13:02 · pre 180 meseci #5
Code:

/*
Na košarkaškoj utakmici je vođena evidencija postignutih poena.
U zavisnosti od toga da li je koš postignut iz slobodnog bacanja,
iz igre, ili je u pitanju "trojka", poeni su 1, 2 ili 3.
*/
DECLARE @T TABLE(Kosarkas NVARCHAR(50), BrojPoena INT)

INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Bogdan Kondić', 2)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Ognjen Simić', 3)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Veljko Ivanović', 2)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Bogdan Kondić', 2)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Filip Vasić', 2)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Veljko Kondić', 2)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Nikola Bogdanović', 2)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Filip Vasić', 1)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Bogdan Kondić', 2)
INSERT INTO @T (Kosarkas, BrojPoena) VALUES(N'Veljko Kondić', 2)

--Koliko je ukupno postignuto poena
SELECT SUM(BrojPoena) AS UkupnoPoena FROM @T

--Koliko je svaki košarkaš postigao poena
SELECT Kosarkas, SUM(BrojPoena) AS BrojPoena FROM @T GROUP BY Kosarkas

--Koliko je ukupno dato koševa
SELECT COUNT(BrojPoena) AS UkupnoKoseva FROM @T

--Koliko je svaki košarkaš dao koševa
SELECT Kosarkas, COUNT(BrojPoena) AS BrojKoseva FROM @T GROUP BY Kosarkas

Dakle, agregatne funkcije tipa SUM, COUNT i slične možeš da grupišeš po nekom polju. Jasnije?
Re: funkcije i GROUP BY 20.12.2011. u 13:24 · pre 180 meseci
izmenjeno 2 puta, poslednji put CoyoteKG 20.12.2011. u 13:39
  1. CoyoteKG20.12.2011. u 13:39zapis iz teksta poruke
  2. CoyoteKG20.12.2011. u 13:39zapis iz teksta poruke
#6
Aha, daleko jasnije

Znaci ukoliko ne bih koristio SUM, onda mi ni ne treba Group By.

Tada kad bih uradio

SELECT kosarkas, brojpoena

dobio bih celu listu svih pogodaka sa kosarkasima koji su postigli kos. I onda bi mi se kosarkasi ponavljali onoliko puta koliko su postigli koseva.
Da bih to izbegao, i dobio ukupan broj poena od svakog kosarkasa ponaosob, onda moram da koristim SUM, i da grupisem rezultate po kosarkasu. A SUM mi verovatno ne bi radio bez group by?

Nego mi opet nije jasno, ovde na poslu, gledam moji prethodnici kakve su upite pravili. I bukvalno u Group By uvek stavljaju sve iz SELECT linije osim agregatne funkcije. Zato me to buni.

Znaci recimo

Code:

SELECT i.brojkupca ,i.imekupca, sum(a.osnovnacena) as promet_bez_PDV, sum(a.cenasaporezom + a.osnovnacena) as promet_sa_pdv  , nadzorid
FROM porez a, arhivaracuna  i
where a.brojkase = i.brojkase
and a.brojracuna = i.brojracuna
and a.datumracuna = i.datumracuna

and nadzorid like '223%'
and i.prodavnica = 1
and i.idatumracuna between '12/12/2011' and '12/18/2011'
group by i.brojkupca, i.imekupca,  nadzorid
order by 3 desc


Jel ovo znaci da ukoliko taj neki kupac, nema broj ili ime ili svog nadzornika (sto ipak nije moguce), nece biti u rezultatima? Ukoliko bi pisalo samo group by i.brojkupca, koja bi bila razlika u odnosu na prethodni upit
Re: funkcije i GROUP BY 20.12.2011. u 13:44 · pre 180 meseci #7
Najbolji odgovor na sva tvoja pitanja je: "Probaj."
Najbolji način da naučiš je da probaš.

Odgovori, ipak...

Sta bi bilo kad bih
1. odatle izbacio group by funkciju, sta bih dobio?
--Grešku

2. ukoliko bih stavio Group by broj poena ?
--Grešku

3. ukoliko bih stavio Group by kosarkas, broj poena ?
--Dobio bi sve redove kao da si izvršio običan SELECT bez sumiranja i grupisanja.


1. Dakle, ukoliko bih stavio samo select Kosarkas, sum(broj poena), bez group by ne bih dobio nista?
Upit meni tu izlista sve kosarkase koji su postigli pogodak i za njih veze, odnosno sabere broj poena.
--Greška

2. Ukoliko bih stavio group by broj poena, da li bih dobio nesto? Pretpostavljam nista posto ne moze da "sabere kosarkase", a kad bi moglo, onda bih dobio listu 1,2,3 u koloni broj artikala, a u koloni kosarkas bi mi se sabrali kosarkasi koji su postigli te pogotke :).
--Greška

3. ovamo na poslu cesto vidjam da na kraju upita stavljaju u group by sve iz SELECT linije. Zato pitam ovo, jer mi nije jasno cemu sluzi.
--Pogledaj malo pažljivije. Verovatno postoji bar jedno polje nad kojim je izvršena neka agregatna funkcija. To polje ne postoji u GROUP BY klauzuli.
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme