Re: [pgsql-tr-genel] Re: [pgsql-tr-genel] Mysql'dan Postgresql geçerken aldığım hata

From: kingemkurdam <kingemkurdam(at)gmail(dot)com>
To: pgsql-tr-genel(at)postgresql(dot)org
Subject: Re: [pgsql-tr-genel] Re: [pgsql-tr-genel] Mysql'dan Postgresql geçerken aldığım hata
Date: 2011-04-06 14:31:48
Message-ID: 4D9C7954.1050208@gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-tr-genel

On 06.04.2011 15:36, Emre Hasegeli wrote:
> 2011/4/6 kingemkurdam<kingemkurdam(at)gmail(dot)com>:
>> Veritabanı olarak Postgresql'e geçmeye karar verdim.Fakat mysql'da yazdığım
>> sql sorguları Postgresql'de çalışmıyor.Şöyleki zorunlu olarak colomları
>> gruplamamı istiyor.
>>
>> Mysql'da çalışan sorgu
>>
>> http://pastebin.com/PCQYj5PX
>>
>> Fakat bu sorguyu postgresql'de çalıştırdığımda
>>
>> SQL error:
>> ERROR: column "mod_haber.ad" must appear in the GROUP BY clause or be used
>> in an aggregate function
>> LINE 3: mod_haber.ad AS ad,
>>
>>
>> Şeklinde hata alıyorum tüm colomları sırayla gruplayınca hata ortadan
>> kalkıyor yani şöyle.
>>
>> http://pastebin.com/0cRX40LQ
>>
>> Fakat bu şekildede istediğim sonuca ulaşamıyorum.
>> Bu sorunu nasıl aşabilirim acaba?
>>
> MySQL'in GROUP BY'da bulunmayan kolonları seçebilmesi SQL ölçününe
> uymayan, tutarsız bir davranış. İstediğiniz sonucun ne olduğunu
> açılmalısınız. Örneğin istediğiniz sonuç her gün en çok okunan haberin
> bütün bilgilerini seçmekse sorgunuzu aşağıdaki biçimde yazabilirsiniz:
>
> SELECT *
> FROM "Haber"
> WHERE ("tarih",
> "okunmaSayısı") IN (SELECT "tarih",
> max("okunmaSayısı")
> FROM "Haber"
> GROUP BY "tarih");
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster

Aslında yapmak istediğim şey haberler diye bir view oluşturmak.
Mysql'da haberler view'i oluşturmak için çalıştırdığım sorgu şu şekilde.

http://pastebin.com/z8XukJji

Amacım sadece mod_haber.id'e göre gruplamak ve haberlere ait bilgileri
ilişkilendirmek mod_gallery tablosundaki resim sayılarını hesaplamak.
Sorgudaşu şekilde http://pastebin.com/T5ie5F8U
DISTINCT ON(mod_haber.id) kullansamda yine aynı şekilde gruplama yapmamı
istiyor.

SELECT
DISTINCT ON(mod_haber.id)
mod_haber.id,
mod_haber.ad
FROM (mod_haber
LEFT JOIN mod_user ON mod_haber.user_id=mod_user.id
LEFT JOIN mod_user_group ON mod_user.group_id=mod_user_group.group_id
LEFT JOIN mod_kategori ON mod_haber.kat_id=mod_kategori.id
LEFT JOIN mod_gallery ON mod_haber.id=mod_gallery.vid)

Şeklinde kullanınca istediğim şekilde getiriyor fakat bu sorguya count
eklediğimde

SELECT
DISTINCT ON(mod_haber.id)
mod_haber.id,
mod_haber.ad,
COUNT(mod_gallery.id) AS rcount
FROM (mod_haber
LEFT JOIN mod_user ON mod_haber.user_id=mod_user.id
LEFT JOIN mod_user_group ON mod_user.group_id=mod_user_group.group_id
LEFT JOIN mod_kategori ON mod_haber.kat_id=mod_kategori.id
LEFT JOIN mod_gallery ON mod_haber.id=mod_gallery.vid)

Yine gruplamamı istiyor.
Hata mesajı:

ERROR: column "mod_haber.id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 4: mod_haber.id,

In response to

Responses

Browse pgsql-tr-genel by date

  From Date Subject
Next Message Emre Hasegeli 2011-04-06 15:08:41 Re: [pgsql-tr-genel] Re: [pgsql-tr-genel] Re: [pgsql-tr-genel] Mysql'dan Postgresql geçerken aldığım hata
Previous Message Emre Hasegeli 2011-04-06 12:36:21 Re: [pgsql-tr-genel] Mysql'dan Postgresql geçerken aldığım hata