Group By Hatası:
Group By Hatası:
SQL Joinleri vs ile aram pek yoktur. Fakat bir türlü çözemedim buradaki group by da hata nedir ??
select * from MUSTERI M join HEDIYE_HAREKET H on M.MUSTERI_ID = H.MUSTERI_ID group by M.MUSTERI_ID
MUSTERI_ID adında bir filedim var fakat yinede hata alıyorum acaba sorun nedir neyi gözden kaçırıyorum ????
Hata: Invalid Expression in the select list (not contained in either an anggregate function or the GROUP BY clause)
select * from MUSTERI M join HEDIYE_HAREKET H on M.MUSTERI_ID = H.MUSTERI_ID group by M.MUSTERI_ID
MUSTERI_ID adında bir filedim var fakat yinede hata alıyorum acaba sorun nedir neyi gözden kaçırıyorum ????
Hata: Invalid Expression in the select list (not contained in either an anggregate function or the GROUP BY clause)
St. NonStop
Aziz DURMAZ
Elektronik ve Haberleşme Mühendisi
Aziz DURMAZ
Elektronik ve Haberleşme Mühendisi
Kısacası yapmak istediğim şu
select * from MUSTERI M join HEDIYE_HAREKET H on M.MUSTERI_ID = H.MUSTERI_ID sorgusu ile
ID
----
201
122
201
93
gibi veriler elde ediyorum. Benim istediğim ise
ID
---
201
122
93
Belli bir kolontaki yinemeli kayıt varsa bunları tek bir kayıt olarak göstermek istiyorum..
select * from MUSTERI M join HEDIYE_HAREKET H on M.MUSTERI_ID = H.MUSTERI_ID sorgusu ile
ID
----
201
122
201
93
gibi veriler elde ediyorum. Benim istediğim ise
ID
---
201
122
93
Belli bir kolontaki yinemeli kayıt varsa bunları tek bir kayıt olarak göstermek istiyorum..
St. NonStop
Aziz DURMAZ
Elektronik ve Haberleşme Mühendisi
Aziz DURMAZ
Elektronik ve Haberleşme Mühendisi
Group by kullanıyorsanız eğer select ile seçtiğiniz tüm alanları group by ın yanına yazmanız lazım.
bu şekilde hata vermez.
Kod: Tümünü seç
select M.MUSTERI_ID from MUSTERI M join HEDIYE_HAREKET H on M.MUSTERI_ID = H.MUSTERI_ID group by M.MUSTERI_ID
Kod: Tümünü seç
select M.MUSTERI_ID, M.MUSTERI_KOD, M.MUSTERI_SMC from MUSTERI M join HEDIYE_HAREKET H on M.MUSTERI_ID = H.MUSTERI_ID group by M.MUSTERI_ID

Eğer tüm alanları group byın yanına yazarsam ne farkı kalacak normal select ten ???
St. NonStop
Aziz DURMAZ
Elektronik ve Haberleşme Mühendisi
Aziz DURMAZ
Elektronik ve Haberleşme Mühendisi
Grup un amacı genelde bir veya bir kaç alanı sabit tutarak, toplam (SUM) almak için kullanılabilir. Dolaysıyla da şeklindeki bir select de SUM alınan alan haricindekilerin group by dan sonra yazılması gerekir
Herhangi bir fonksiyon kullanmıyorsan gruplamanın da bir anlamı kalmaz 
Kod: Tümünü seç
select adi, soyadi, sum(tutar) from tablo
group by adi, soyadi


Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Merhaba,
Ben de sizin gibi join i pek kullanmadım. Ama eğer join ile birlikte kullanılabiliyorsa Distinct i kullanırsanız işiniz görülebilir. Örneğin
şeklinde bir kod girerseniz high kolonunda ne kadar 1 varsa bir tane görünür, ne kadar 25600 varsa bir tane görünür ...
Kodunuzu distinct ile kullanmayı bir deneyin derim.
Kolay gelsin.
Ben de sizin gibi join i pek kullanmadım. Ama eğer join ile birlikte kullanılabiliyorsa Distinct i kullanırsanız işiniz görülebilir. Örneğin
Kod: Tümünü seç
select distinct(high) from spt_values
Kodunuzu distinct ile kullanmayı bir deneyin derim.
Kolay gelsin.
Hocam kusura bakmayın ben daha öncede 5 sene MySQL ile çalışmış birisi olarak IB veya Firebirddeki SQL mantığındaki değişikliklere adepte olmakta zorlanıyorum.
MySQL bu sonucu almak için
dediğimde müşteri ID sine göre gruplandırılmış tüm lsiteyi alabilirdim. Birden fazla kayıt olduğunda ise ilk kayıtları almış olurum.
FireBird e ise bu işlemi ancak..
Bu kadar uzunbir kod yazark elde ediyorum. Mantık olarakda anlamsız geliyor bir sürü grubu sorguya sokmak. Kaldı ki Hediye ile ilgili bir bilgide alamıyorum çünkü (Buradaki sorguda gerek yok) Hediye tablosundan bir veri almaya kalkışsam işler iyicene karışacak. Tablo ilişki yapılandırmam sayesinde işi kurtardım.
MySQL bu sonucu almak için
Kod: Tümünü seç
select * from MUSTERI as M, HEDIYE as H where M.MUSTERI_ID = H.MUSTERI_ID group by M.MUSTERI_ID
FireBird e ise bu işlemi ancak..
Kod: Tümünü seç
SQL = "select M.MUSTERI_ID, ";
SQL += " M.MUSTERI_NO, ";
SQL += " M.MUSTERI_KOD, ";
SQL += " M.MUSTERI_AD, ";
SQL += " M.MUSTERI_ADRES, ";
SQL += " M.MUSTERI_VD, ";
SQL += " M.MUSTERI_VN, ";
SQL += " M.MUSTERI_SMC ";
SQL += "from MUSTERI M join HEDIYE_HAREKET H on M.MUSTERI_ID = H.MUSTERI_ID ";
SQL += "group by M.MUSTERI_ID, ";
SQL += " M.MUSTERI_NO, ";
SQL += " M.MUSTERI_KOD, ";
SQL += " M.MUSTERI_AD, ";
SQL += " M.MUSTERI_ADRES, ";
SQL += " M.MUSTERI_VD, ";
SQL += " M.MUSTERI_VN, ";
SQL += " M.MUSTERI_SMC ";
SQL += "order by M.MUSTERI_NO";
St. NonStop
Aziz DURMAZ
Elektronik ve Haberleşme Mühendisi
Aziz DURMAZ
Elektronik ve Haberleşme Mühendisi
hata vermemsi için
olması lazım. Gruplamanın anlamı bu zaten. Şöyle anlatayım:
Burda A alanına göre gruplama yaparsan eğer A1 ve A2 olarak iki satır getirecektir, eğer B yi de görmek istersen grupladığı A2 satırında hangi B satırını getirecek? B1 i mi B2 yi mi? Ya sadece A ya göre gruplayıp A1 ve A2 olarak iki satır göreceksin ve B yi göremeyeceksin ya da B yi görmek istiyorsan eğer B ye göre de gruplayacaksın, tabi bu durumda dönen sonuç 3 satır olacaktır.
Kod: Tümünü seç
select M.MUSTERI_ID, M.MUSTERI_KOD, M.MUSTERI_SMC from MUSTERI M join HEDIYE_HAREKET H on M.MUSTERI_ID = H.MUSTERI_ID group by M.MUSTERI_ID, M.MUSTERI_KOD, M.MUSTERI_SMC
Kod: Tümünü seç
A B
----------
A1 B1
A2 B1
A2 B2
MySQL bunu çok güzel çözmüş ilk kayıtı getiriyor 
Tablolarımız diyelimki 1 alandeğil daha fazla alandan oluşuyor
A Tablosu B Tablosu
------------ --------------
A1 X2 B1
A1 X1 B2
A2 X3 B3
A3 X3 B2
Ben şimdi A1 A2 A3 grublandırmak istesem gruplandıramayıcam çünkü X ler işi bozacak.
Sonuçta ben illaki fonkiyon mu kullanmalıyım grouplandırma yapmam için faklı bir amaç için kullanamazmıyım.
Not * problemimi çözdüm sadece anlamak idrak etmek için soruyorum.

Tablolarımız diyelimki 1 alandeğil daha fazla alandan oluşuyor
A Tablosu B Tablosu
------------ --------------
A1 X2 B1
A1 X1 B2
A2 X3 B3
A3 X3 B2
Ben şimdi A1 A2 A3 grublandırmak istesem gruplandıramayıcam çünkü X ler işi bozacak.

Not * problemimi çözdüm sadece anlamak idrak etmek için soruyorum.
St. NonStop
Aziz DURMAZ
Elektronik ve Haberleşme Mühendisi
Aziz DURMAZ
Elektronik ve Haberleşme Mühendisi
Kod: Tümünü seç
SELECT A, MIN(X), B FROM T1,T2 GROUP BY A,B
Yani illaki bir fonksiyon kullanacaz fonksiyon kullanmadıklarımızıda groupbun içine alacağız. Fakat şöyle bir durum ortaya çıkıyor. Min max veya sum kullanarak açığa çıkan sonuçlar benim db de ham halinde olan satırların aynısı olmaya bilir.
Az önce ki örnekten gitmek gerekirse;
Yazdığımızda bize sonuç olarak dönen satır
A1 X1 B1
A2 X3 B3
A3 X3 B2
olacaktır fakat bizim ham haldeki satırlarımızın hiçbirinde A1 X1 B1 şeklinde bir satır yok. ?????
Az önce ki örnekten gitmek gerekirse;
Kod: Tümünü seç
SELECT A, MIN(X), MIN(B) FROM T1 GROUP BY A
A1 X1 B1
A2 X3 B3
A3 X3 B2
olacaktır fakat bizim ham haldeki satırlarımızın hiçbirinde A1 X1 B1 şeklinde bir satır yok. ?????
St. NonStop
Aziz DURMAZ
Elektronik ve Haberleşme Mühendisi
Aziz DURMAZ
Elektronik ve Haberleşme Mühendisi