Bu yüzden GROUP_CONCAT aggregate function bubir boşlukla ayrılmış dizeye birden fazla satır birleştirin
userid, combined
1, a b
2, c d
3, e
Bu yüzden GROUP_CONCAT aggregate function bubir boşlukla ayrılmış dizeye birden fazla satır birleştirin
userid, combined
1, a b
2, c d
3, e
Kullanım benzeyecek yüzden sorguyu yapacağını nasıl bu
userid, col
--------------
1, a
1, b
2, c
2, d
3, e
gibi 5 satır vardır:
SELECT yt.userid,
GROUP_CONCAT(yt.col SEPARATOR ' ') AS combined
FROM YOUR_TABLE yt
GROUP BY yt.userid
Varsayılan ayırıcı bir virgül (","), bu nedenle tek bir alanın SEPARATOR değerini belirtmeniz gerekir. İstediğiniz çıktı.
Eğer GROUP_CONCAT değerlerin sırasını sağlamak istiyorsanız
kullanın:SELECT yt.userid,
GROUP_CONCAT(yt.col ORDER BY yt.col SEPARATOR ' ') AS combined
FROM YOUR_TABLE yt
GROUP BY yt.userid
Ben bunları tutmak gerekirse bu yayını kontrol edebilirsiniz Şu anda Hive kullanıyor, bu yüzden GROUP_CONCAT bir agregasyon işlevi olarak kabul edilmediğinden, grubun bir kısmını neden yapamıyorum? – haoxu
@haoxu: Sonraki seçenek (bir SQL önceliğinden), bir imleç ve birleştirme dizgesi olabilir, ancak bir MySQL işlevi gerektirir. Hive ile aşina değilim - yerel bir sorgu kullanmanın bir yolu yok mu? –
HiveQL'de GROUP_CONCAT için bir JIRA isteği dosyalandı: https://issues.apache.org/jira/browse/HIVE-1689 –
Sana Hive QL kullanarak bunu yapamaz eminim. Ancak, kendi Harita/Küçültme komut dosyalarınızı yazıyorsanız bunu yapmak mümkün olmalıdır - başlamak için this tutorial'a bakın.
cevap güncel değil. Yeni sürümlerin özellikleri var. –
Kovanda sen
SELECT userid, collect_set(combined) FROM tabel GROUP BY user_id;
collect_set çoğaltılamaz kaldırır kullanabilirsiniz. arasında
tam olarak ne istedim! sorguya göre bir gruptan bir satır uydurmak için cazibe gibi çalışır –
SELECT
userid,
concat_ws(" ", collect_set(col)) AS combined
FROM table
GROUP BY userid
Neredeyse kopyası kesin: http://stackoverflow.com/questions/2885709/sql-concatenate-rows-query –