O mümkün mü GROUP BY
MySQL birden fazla sütuna SELECT
sorgusu? Örneğin:
GROUP BY fV.tier_id AND 'f.form_template_id'
O mümkün mü GROUP BY
MySQL birden fazla sütuna SELECT
sorgusu? Örneğin:
GROUP BY fV.tier_id AND 'f.form_template_id'
Yanıtlar:
GROUP BY col1, col2, col3
Evet, birden çok sütuna göre gruplayabilirsiniz. Örneğin,
SELECT * FROM table
GROUP BY col1, col2
Sonuçlar önce col1'e, sonra col2'ye göre gruplandırılacaktır. MySQL'de sütun tercihi soldan sağa gider.
GROUP BY
geçerlidir col1+col2
. örneğin col1 = 1, 2, 1, 2 | col2 = 1, 2, 3, 2
ve koşmak önerilenin aksine GROUP BY col1,col2
dönecektir . Oysa artan col2 sırasını değiştirirdi. Demo: sqlfiddle.com/#!9/d5f69/1 Sütunların tersine çevrilmesine rağmen her iki durumda da satır kimliği: 2'nin döndürüldüğünü unutmayın . 1,1|1,3|2,2
1,1|2,2
GROUP BY col2, col1
1,1|2,2|1,3
2,2
GROUP BY
) göre sıralar . Ve ilk tanımlı sütunda eşit sonuçlar varsa, o zaman sadece ikinci tanımlı sütuna göre eşit sonuç sıralaması içinde
SUM
ile ilgili GROUP BY
. Eğer GROUP BY
sadece tek sütun ve ardından SUM
her bir ayrı (farklı) tüm değerleri sütun değeri s sqlfiddle.com/#!9/1cbde2/2 . EğerGROUP BY
İki sütun . Daha sonra ilk önce mysql, ilk sütun değeri için ikinci sütunda farklı değerler olup olmadığını kontrol eder. Evetse, sqlfiddle.com/#!9/1cbde2/1SUM
ikinci sütunun her farklı değerini mysql olarak ayarlayın .
Evet, ancak iki sütuna göre gruplama ne anlama geliyor? Bu, her satırdaki her bir benzersiz çift tarafından gruplandırmayla aynıdır. Sütunları listelediğiniz sıra, satırların sıralanma biçimini değiştirir.
Örneğinizde,
GROUP BY fV.tier_id, f.form_template_id
Bu arada, kod
GROUP BY f.form_template_id, fV.tier_id
benzer sonuçlar verir, ancak farklı şekilde sıralanır.
Basit bir örnek kullanmak için, bir sitede ziyaret edilen sayfa başına benzersiz IP adreslerini özetlemek için bir sayacım vardı. Hangi temelde pagename ve sonra IP ile gruplandırma. DISTINCT ve GROUP BY kombinasyonuyla çözdüm.
SELECT pagename, COUNT(DISTINCT ipaddress) AS visit_count FROM log_visitors GROUP BY pagename ORDER BY visit_count DESC;
(Bunu uygulamak zorundayım) grubunu aynı anda iki sütun tercih ederseniz, sadece bu noktayı gördüm:
SELECT CONCAT (col1, '_', col2) AS Group1 ... GROUP BY Group1
SELECT CONCAT(col1, '_', col2) FROM GROUP BY col1, col2
. Sonuçlar genellikle bu cevapla aynı görünecektir , ancak dahili yürütme oldukça farklıdır.
GROUP BY CONCAT(col1, '_', col2)
GROUP BY col1, col2
. Bazı verilerle yanlış sonuçlar verecektir. Diyelim col1, col2
ki değerler var: ('a_b', 'c')
bir satırda ve ('a', 'b_c')
diğerinde. GROUP BY CONCAT ile bu yanlış cevap iki satırı bir araya getirecektir. Doğru cevap olmayacak.
SELECT CONCAT(col1, '_', col2) ... FROM ... GROUP BY col1, col2 ;