27 EYLÜL 2010, PAZARTESİ
Grup, her grupta ilk satır seçmek?
Başlıktan da anlaşılacağı gibi, satır GROUP BY
ile gruplandırılmış her kümesindeki ilk satırı seçmek istiyorum.
Eğer purchases
bir tablo var, özellikle bu gibi görünüyor:
SELECT * FROM purchases;
id | customer | total --- ---------- ------ 1 | Joe | 5 2 | Sally | 3 3 | Joe | 2 4 | Sally | 1
En büyük alım (total
) customer
her tarafından yapılan id
sorgulamak istiyorum. Şöyle bir şey:
SELECT FIRST(id), customer, FIRST(total)
FROM purchases
GROUP BY customer
ORDER BY total DESC;
FIRST(id) | customer | FIRST(total) ---------- ---------- ------------- 1 | Joe | 5 2 | Sally | 3
CEVAP
27 EYLÜL 2010, PAZARTESİ
Oracle 8i SQL Server 2005 , PostgreSQL 8.4 , DB2 , Firebird 2.1 Alma, Sybase, Vertica:
WITH summary AS (
SELECT p.id,
p.customer,
p.total,
ROW_NUMBER() OVER(PARTITION BY p.customer
ORDER BY p.total DESC) AS rk
FROM PURCHASES p)
SELECT s.*
FROM summary s
WHERE s.rk = 1
Herhangi bir veritabanı tarafından desteklenen
Ama mantık bağları kırmak için eklemek gerekir:
SELECT MIN(x.id), -- change to MAX if you want the highest
x.customer,
x.total
FROM PURCHASES x
JOIN (SELECT p.customer,
MAX(total) AS max_total
FROM PURCHASES p
GROUP BY p.customer) y ON y.customer = x.customer
AND y.max_total = x.total
GROUP BY x.customer, x.total
Bunu Paylaş:
Nasıl başka bir tabloda eşleşen bir gi...
Nasıl çoklu satır sabitler dolu seçmek...
Sqlite bir tablodan rastgele satır seç...
Nasıl Varlık Çerçevesi (dosyalarda gru...
Nasıl MAX ETMENİZ sorgu TARAFINDAN bir...