Bir grupta cümleciğe göre sütunların sırası önemli mi?


85

Biri çok yüksek ve diğeri çok düşük (benzersiz değer sayısı) olmak üzere iki sütunum varsa, hangi sıraya göre gruplandırdığım önemli mi?

İşte bir örnek:

select 
     dimensionName, 
     dimensionCategory, 
     sum(someFact)
from SomeFact f
join SomeDim d on f.dimensionKey = d.dimensionKey
group by 
    d.dimensionName,  -- large number of unique values
    d.dimensionCategory -- small number of unique values

Önemli olduğu durumlar var mı?


2
İlgili gönderiye
trcarden

Yanıtlar:


74

Hayır, GROUP BY maddesi için sıralama önemli değildir.

MySQL ve SQLite, gruptan çıkarılmış sütunları seçmenize izin veren bildiğim tek veritabanlarıdır (standart dışı, taşınabilir değil), ancak burada da sıra önemli değil.


27

SQL bildirimseldir.

Bu durumda, optimizasyon uzmanına verilerin nasıl gruplanmasını istediğinizi söylediniz ve bu nasıl yapılacağını belirler.

Satır satır (prosedürel) değerlendirmeyecek ve önce bir sütuna bakmayacaktır.

Ana sütun sıralaması, dizinler içindir. col1, col2ile aynı değil col2, col1. Hiç.


15
ORDER BY için de önemlidir.
Vincent McNabb

12

Microsoft SQL Server'ın ROLLUP adı verilen eski, standart olmayan bir özelliği vardır. ROLLUP, GROUP BY sözdiziminin bir uzantısıdır ve kullanıldığında, GROUP BY sütunlarının sıralaması, sonuçta hangi sütunların gruplandırılması gerektiğini belirler. Ancak ROLLUP kullanımdan kaldırıldı. Standart SQL alternatifi, SQL Server 2008 ve sonraki sürümler tarafından desteklenen gruplama kümelerini kullanmaktır.


10

Bundan burada bahsedilmediğinden beri. Yukarıdaki cevaplar doğrudur, yani "grupla" ifadesinden sonraki sütunların sırası , sorgunun doğruluğunu (yani toplam tutarı) etkilemeyecektir .

Ancak, alınan satırların sırası, "group by" yan tümcesinden sonra belirtilen sütunların sırasına göre değişecektir. Örneğin Aaşağıdaki satırlara sahip Tablo düşünün :

Col1 Col2 Col3
1   xyz 100
2   abc 200
3   xyz 300
3   xyz 400

SELECT *, SUM(Col3) FROM A GROUP BY Col2, Col1Col2artan sırayla sıralanan satırları alır .

Col1 Col2 Col3 sum(Col3)
2   abc 200 200
1   xyz 100 100
3   xyz 300 700

Şimdi gruptaki sütunun sırasını olarak değiştirin Col1, Col2. Alınan satırlar artan sıralama ile sıralanmıştır Col1.

yani select *, sum(Col3) from A group by Col1, Col2

Col1 Col2 Col3 sum(Col3)
1   xyz 100 100
2   abc 200 200
3   xyz 300 700

Not: Toplama miktarı (yani sorgunun doğruluğu) tam olarak aynı kalır.


7
Ancak, "ORDER BY" kullanılmadığı sürece, seçilen sonuçların satır sırası yine de tanımsızdır, değil mi? Bu nedenle, GROUP BY'ı hiç kullanmasanız bile belirli bir satır sırasına asla güvenmemelisiniz.
avl_sweden

@Avl_sweden'i kabul ederek, yanıtın en azından bu davranışın uygulamaya özgü olduğunu göstermesi gerektiğini düşünüyorum. SQL sunucusunun daha yeni (veya hatta aynı) bir sürümünün farklı bir sıralama üretmeyeceğinin garantisi yoktur.
NobodysNightmare

2

Biri çok yüksek ve diğeri çok düşük (benzersiz değer sayısı) olmak üzere iki sütunum varsa, hangi sıraya göre gruplandırdığım önemli mi?

Sorgu-1

SELECT spec_id, catid, spec_display_value, COUNT(*) AS cnt  FROM tbl_product_spec 
GROUP BY spec_id, catid, spec_display_value ;

Sorgu-2

SELECT spec_id, catid, spec_display_value, COUNT(*) AS cnt  FROM tbl_product_spec FORCE INDEX(idx_comp_spec_cnt)
GROUP BY catid, spec_id,spec_display_value;

Her ikisi de eşittir, sıralama cümlelere göre grup halinde çalışmaz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.