2009-08-21 16 views

cevap

46

don'y unutursanız o gruplandırılmış (yani SUM) alanlarını ve gruplandırılmamış alanları karıştırıyorsunuz, GRUP BY gruplandırılmamış alanlardan biri ile.

SELECT Field1, SUM(something) AS Field2 
FROM tablename 
GROUP BY Field1 
ORDER BY Field2 

Ve her zaman böyle bir türetilmiş sorgu yapabilirsiniz:

SELECT SUM(something) AS fieldname 
FROM tablename 
ORDER BY fieldname 

VEYA bu:

bu deneyin

SELECT 
    f1, f2 
FROM 
    (
     SELECT SUM(x+y) as f1, foo as F2 
     FROM tablename 
     GROUP BY f2 
    ) as table1 
ORDER BY 
    f1 

Birçok seçenek mevcut!

+0

evet, tüm kayıtlar bazı alanların toplamına sırasını istiyorum. bu çalışmalar: SELECT sum (c_counts + f_counts) FROM tablosundan GROUP BY name LIMIET 20; Teşekkürler! – lovespring

+0

Arkadaşım sadece hayatımı çok daha kolaylaştıracak! Çağlar için benzer bir sorguyla mücadele ediyordum ve doğru bir şekilde alamadım - sadece pastamı kurtardın! Çok teşekkürler! –

+0

Ayrıca, alan1, toplam (alan) tablo sırala 2'yi SEÇEBİLİR (2 temelde ikinci alan anlamına gelir), etkileşimli kullanımda uygundur, ancak gerçek kod için bunu tavsiye etmem. –

7

Bu yerine group by maddesini kullanmak zorunda olacak, sen order by fıkra işe yaramaz yani

SELECT ID,NAME, (C_COUNTS+F_COUNTS) AS SUM_COUNTS 
FROM TABLE 
ORDER BY SUM_COUNTS LIMIT 20 

SUM fonksiyonu, tüm satırların yukarı katacak yaparız.

+0

bu gerçekten bu iki alanın toplamına göre sıralamak için çalışacaktır. Toplamı "toplamı" olarak "toplam" okuyordum, ama bence doğru yorumunuz var. – user158017

0

GROUP BY deyimi olmadan, tüm satırlar tek bir satıra kadar tüm satırları döndürecek, böylece sorgunuz gerçekten çalışmaz. Eger adina göre gruplandiysaniz ve adina göre sifirlandiysaniz (c_counts + f_counts), bazi faydalı sonuçlar alabilirsiniz. Ama sen bir şeyleri gruplandırmalısın.

0

Burada gördüğüm sorun "toplam" bir toplu işlevdir. İlk olarak, sorgunun kendisini düzeltmeniz gerekir.

.

Select * 
from (query above) a 
order by total 

EDIT:

Select sum(c_counts + f_counts) total, [column to group sums by] 
from table 
group by [column to group sums by] 

sonra, bunu sıralayabilir Ama Virat tarafından yayını görebilecek. Belki de istediğiniz şey, bir grup üzerinde toplam alanlarınızın toplamı değil, yalnızca her bir kayıt için bu alanların toplamıdır. Bu durumda Virat doğru çözüme sahiptir.

+0

Alt sorgu gereksizdir - sadece ilk sorguya 'SİPARİŞ BY 'ekleyin. Bu örnekte: 'total olarak SİPARİŞ' ya da toplam DESC İLE SİPARİŞ. Ayrıca bir “LIMIT” e ihtiyacınız varsa, daha sonra gider. –

3

Bu deneyebilirsiniz:

SELECT * 
FROM table 
ORDER BY (c_counts+f_counts) 
LIMIT 20