{"id":26953,"date":"2025-08-03T09:15:26","date_gmt":"2025-08-03T06:15:26","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/"},"modified":"2025-08-03T09:15:26","modified_gmt":"2025-08-03T06:15:26","slug":"postgresql-birden-cok-sutunla-string_agg-kullanimi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/","title":{"rendered":"PostgreSQL: Birden \u00c7ok S\u00fctunla string_agg Kullan\u0131m\u0131"},"content":{"rendered":"<p># PostgreSQL&#8217;de string_agg ile \u00c7oklu S\u00fctun Birle\u015ftirme<\/p>\n<p>PostgreSQL veritaban\u0131n\u0131zda birden fazla s\u00fctunu tek bir sat\u0131ra birle\u015ftirmeniz mi gerekiyor?  \u00d6rne\u011fin, bir m\u00fc\u015fterinin t\u00fcm sipari\u015flerini tek bir sat\u0131rda g\u00f6stermek veya bir \u00fcr\u00fcn\u00fcn t\u00fcm \u00f6zelliklerini tek bir alanda toplamak m\u0131 istiyorsunuz?  \u0130\u015fte PostgreSQL&#8217;in g\u00fc\u00e7l\u00fc <code class=\"language-\">string_agg<\/code> fonksiyonunu kullanarak bunu nas\u0131l yapaca\u011f\u0131n\u0131z hakk\u0131nda ad\u0131m ad\u0131m bir rehber. Bu makale, temel seviyeden ileri seviyeye kadar, ger\u00e7ek d\u00fcnya \u00f6rnekleriyle zenginle\u015ftirilmi\u015f bir \u00f6\u011frenme yol haritas\u0131 sunmaktad\u0131r.  <code class=\"language-\">string_agg<\/code> fonksiyonunu multiple s\u00fctunlarla nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131, performans optimizasyonunu ve olas\u0131 sorunlar\u0131 ele alaca\u011f\u0131z.<\/p>\n<p><strong>\u00d6\u011frenme Yol Haritas\u0131<\/strong><\/p>\n<p><strong>Yeni Ba\u015flayan:<\/strong>  Temel <code class=\"language-\">string_agg<\/code> kullan\u0131m\u0131 ve basit \u00f6rnekler.<\/p>\n<p><strong>Orta Seviye:<\/strong> Ger\u00e7ek d\u00fcnya senaryolar\u0131, performans optimizasyonu ipu\u00e7lar\u0131 ve daha karma\u015f\u0131k sorgular.<\/p>\n<p><strong>\u0130leri Seviye:<\/strong>  Performans analizi, edge case&#8217;ler ve geli\u015fmi\u015f teknikler.<\/p>\n<p><strong>1. Temel Kavramlar: string_agg Fonksiyonu Nedir?<\/strong><\/p>\n<p><code class=\"language-\">string_agg<\/code> fonksiyonu, PostgreSQL&#8217;de bir gruptaki de\u011ferleri tek bir string halinde birle\u015ftirmenizi sa\u011flar.  Temel s\u00f6zdizimi \u015fu \u015fekildedir:<\/p>\n<pre class=\"language-sql\"><code>string_agg(expression, delimiter)<\/code><\/pre>\n<p>* <code class=\"language-\">expression<\/code>: Birle\u015ftirilecek s\u00fctun veya ifade.<br \/>\n* <code class=\"language-\">delimiter<\/code>: De\u011ferler aras\u0131ndaki ayra\u00e7 (\u00f6rne\u011fin, virg\u00fcl, bo\u015fluk, tire).<\/p>\n<p>\u00d6rnek:  Bir <code class=\"language-\">urunler<\/code> tablosunda \u00fcr\u00fcn isimlerini virg\u00fclle ay\u0131rarak birle\u015ftirmek:<\/p>\n<pre class=\"language-sql\"><code>SELECT string_agg(urun_adi, ', ') AS urun_listesi\nFROM urunler;<\/code><\/pre>\n<p>Bu sorgu, <code class=\"language-\">urunler<\/code> tablosundaki t\u00fcm \u00fcr\u00fcn isimlerini virg\u00fclle ay\u0131rarak <code class=\"language-\">urun_listesi<\/code> adl\u0131 tek bir s\u00fctuna birle\u015ftirir.<\/p>\n<p><strong>2.  string_agg ile \u00c7oklu S\u00fctunlar\u0131 Birle\u015ftirme: Nas\u0131l Yap\u0131l\u0131r?<\/strong><\/p>\n<p><code class=\"language-\">string_agg<\/code> fonksiyonu tek bir s\u00fctun i\u00e7in tasarlanm\u0131\u015ft\u0131r. Ancak, farkl\u0131 s\u00fctunlar\u0131 birle\u015ftirmek i\u00e7in <code class=\"language-\">||<\/code> (string birle\u015ftirme operat\u00f6r\u00fc) ile birlikte kullanabiliriz.  \u00d6rne\u011fin, <code class=\"language-\">urunler<\/code> tablosunda \u00fcr\u00fcn ad\u0131n\u0131 ve fiyat\u0131n\u0131 birle\u015ftirmek i\u00e7in:<\/p>\n<pre class=\"language-sql\"><code>SELECT string_agg(urun_adi || ' - ' || urun_fiyati::text, ', ') AS urun_bilgileri\nFROM urunler;<\/code><\/pre>\n<p>Bu sorgu, her \u00fcr\u00fcn\u00fcn ad\u0131n\u0131 ve fiyat\u0131n\u0131 &#8221; &#8211; &#8221; ile ay\u0131rarak birle\u015ftirir ve sonu\u00e7lar\u0131 virg\u00fclle ay\u0131r\u0131r.  <code class=\"language-\">urun_fiyati::text<\/code> k\u0131sm\u0131, say\u0131sal <code class=\"language-\">urun_fiyati<\/code> s\u00fctununu string&#8217;e d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in kullan\u0131l\u0131r.<\/p>\n<p><strong>3. Ger\u00e7ek D\u00fcnya \u00d6rne\u011fi: M\u00fc\u015fteri Sipari\u015fleri<\/strong><\/p>\n<p>Bir e-ticaret sitesinin veritaban\u0131nda, her m\u00fc\u015fterinin sipari\u015flerini tek bir sat\u0131rda g\u00f6stermek istedi\u011fimizi varsayal\u0131m.  <code class=\"language-\">musteriler<\/code> ve <code class=\"language-\">siparisler<\/code> tablolar\u0131m\u0131z olsun:<\/p>\n<p><strong>musteriler tablosu:<\/strong><\/p>\n<p>| musteri_id | musteri_adi |<br \/>\n|&#8212;|&#8212;|<br \/>\n| 1 | Ahmet Y\u0131lmaz |<br \/>\n| 2 | Ay\u015fe Kaya |<\/p>\n<p><strong>siparisler tablosu:<\/strong><\/p>\n<p>| siparis_id | musteri_id | urun_adi | siparis_tarihi |<br \/>\n|&#8212;|&#8212;|&#8212;|&#8212;|<br \/>\n| 1 | 1 | Kitap | 2024-03-08 |<br \/>\n| 2 | 1 | Kalem | 2024-03-10 |<br \/>\n| 3 | 2 | Defter | 2024-03-15 |<\/p>\n<p>A\u015fa\u011f\u0131daki sorgu, her m\u00fc\u015fterinin sipari\u015f bilgilerini tek bir sat\u0131rda g\u00f6sterir:<\/p>\n<pre class=\"language-sql\"><code>SELECT\n    m.musteri_adi,\n    string_agg(s.urun_adi || ' (' || s.siparis_tarihi::text || ')', ', ') AS siparisler\nFROM\n    musteriler m\nJOIN\n    siparisler s ON m.musteri_id = s.musteri_id\nGROUP BY\n    m.musteri_adi;<\/code><\/pre>\n<p>Bu sorgu, <code class=\"language-\">musteriler<\/code> ve <code class=\"language-\">siparisler<\/code> tablolar\u0131n\u0131 <code class=\"language-\">musteri_id<\/code> s\u00fctununa g\u00f6re birle\u015ftirir ve her m\u00fc\u015fteri i\u00e7in <code class=\"language-\">string_agg<\/code> fonksiyonunu kullanarak sipari\u015f bilgilerini birle\u015ftirir.<\/p>\n<p><strong>4. Performans Optimizasyonu \u0130pu\u00e7lar\u0131<\/strong><\/p>\n<p>\u00c7ok b\u00fcy\u00fck tablolarla \u00e7al\u0131\u015f\u0131rken <code class=\"language-\">string_agg<\/code> performans sorunlar\u0131na yol a\u00e7abilir.  \u0130\u015fte baz\u0131 optimizasyon ipu\u00e7lar\u0131:<\/p>\n<p>* <strong>\u0130ndeksler:<\/strong>  <code class=\"language-\">GROUP BY<\/code> ile kullan\u0131lan s\u00fctunlara indeks eklemek sorgu performans\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir.<br \/>\n* <strong>WHERE klauzu:<\/strong>  Gerekli verileri filtrelemek i\u00e7in <code class=\"language-\">WHERE<\/code> klauzu kullan\u0131n.  T\u00fcm tabloyu i\u015flemek yerine sadece ilgili veriler \u00fczerinde \u00e7al\u0131\u015fmak daha h\u0131zl\u0131d\u0131r.<br \/>\n* <strong>Alt Sorgular:<\/strong>  Karma\u015f\u0131k sorgularda, alt sorgular yerine <code class=\"language-\">JOIN<\/code> kullanmak daha verimli olabilir.<br \/>\n* <strong>LIMIT klauzu:<\/strong>  \u00c7ok fazla veri varsa, <code class=\"language-\">LIMIT<\/code> klauzu kullanarak sonu\u00e7 k\u00fcmesini s\u0131n\u0131rlayabilirsiniz.<br \/>\n* <strong>Par\u00e7al\u0131 \u0130\u015fleme:<\/strong>  \u00c7ok b\u00fcy\u00fck tablolar i\u00e7in, verileri daha k\u00fc\u00e7\u00fck par\u00e7alara b\u00f6lerek i\u015flemek ve sonu\u00e7lar\u0131 birle\u015ftirmek daha etkili olabilir.  Bu, \u00f6zellikle b\u00fcy\u00fck gruplarla \u00e7al\u0131\u015f\u0131rken faydal\u0131d\u0131r.<\/p>\n<p><strong>5. \u0130leri D\u00fczey Teknikler: JSON Kullan\u0131m\u0131<\/strong><\/p>\n<p>\u00c7oklu s\u00fctunlar\u0131 birle\u015ftirmenin daha esnek bir yolu, JSON kullanmakt\u0131r.  JSON, daha karma\u015f\u0131k veri yap\u0131lar\u0131n\u0131 tek bir alanda saklaman\u0131za olanak tan\u0131r.<\/p>\n<pre class=\"language-sql\"><code>SELECT\n    m.musteri_adi,\n    json_agg(json_build_object('urun_adi', s.urun_adi, 'siparis_tarihi', s.siparis_tarihi)) AS siparisler\nFROM\n    musteriler m\nJOIN\n    siparisler s ON m.musteri_id = s.musteri_id\nGROUP BY\n    m.musteri_adi;<\/code><\/pre>\n<p>Bu sorgu, her m\u00fc\u015fterinin sipari\u015flerini bir JSON dizisi olarak birle\u015ftirir.  Bu yakla\u015f\u0131m, daha fazla veriyi tek bir alanda saklamak ve daha sonra kolayca i\u015flemek i\u00e7in daha uygun olabilir.  Daha fazla bilgi i\u00e7in [Fatih Soysal&#8217;\u0131n PostgreSQL JSON rehberine](https:\/\/fatihsoysal.com\/postgresql-json-rehberi\/) bakabilirsiniz (buras\u0131 \u00f6rnek bir ba\u011flant\u0131d\u0131r, ger\u00e7ek bir ba\u011flant\u0131 eklenmelidir).<\/p>\n<p><strong>6. Edge Case&#8217;ler ve Hata Ay\u0131klama<\/strong><\/p>\n<p>* <strong>NULL De\u011ferler:<\/strong> <code class=\"language-\">string_agg<\/code> fonksiyonu NULL de\u011ferleri dikkate almaz.  NULL de\u011ferleri i\u00e7eren s\u00fctunlar\u0131 birle\u015ftirmeden \u00f6nce bunlar\u0131 bo\u015f string (&#8220;&#8221;) ile de\u011fi\u015ftirmeniz gerekebilir.<br \/>\n* <strong>\u00c7ok B\u00fcy\u00fck Stringler:<\/strong>  \u00c7ok b\u00fcy\u00fck stringler olu\u015fturmak performans sorunlar\u0131na ve hata mesajlar\u0131na yol a\u00e7abilir.  String uzunlu\u011funu s\u0131n\u0131rlamak i\u00e7in fonksiyonlar kullanabilirsiniz.<br \/>\n* <strong>Karakter Kodlamas\u0131:<\/strong>  Farkl\u0131 karakter kodlamalar\u0131 kullanan s\u00fctunlar\u0131 birle\u015ftirirken sorunlar ya\u015fayabilirsiniz.  Karakter kodlamalar\u0131n\u0131 kontrol edin ve gerekti\u011finde d\u00f6n\u00fc\u015ft\u00fcrme yap\u0131n.<\/p>\n<p><strong>7.  Performans Analizi ve Optimizasyon<\/strong><\/p>\n<p><code class=\"language-\">EXPLAIN ANALYZE<\/code> komutu, sorgunuzun performans\u0131n\u0131 analiz etmenize yard\u0131mc\u0131 olur.  Bu komutu kullanarak sorgunuzun hangi a\u015famalar\u0131nda zaman harcad\u0131\u011f\u0131n\u0131 ve hangi indekslerin kullan\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6rebilirsiniz.  Sonu\u00e7lar\u0131 inceleyerek, sorgunuzu optimize etmek i\u00e7in gereken ad\u0131mlar\u0131 belirleyebilirsiniz.  \u00d6rne\u011fin, indeks eklemek veya farkl\u0131 bir sorgu stratejisi kullanmak performans\u0131 art\u0131rabilir.<\/p>\n<p><strong>8.  Ger\u00e7ek D\u00fcnya Senaryosu: \u00dcr\u00fcn \u00d6zellikleri<\/strong><\/p>\n<p>Bir \u00fcr\u00fcn katalo\u011funda her \u00fcr\u00fcn\u00fcn \u00f6zelliklerini tek bir alanda birle\u015ftirmek isteyelim.  <code class=\"language-\">urunler<\/code> ve <code class=\"language-\">ozellikler<\/code> tablolar\u0131m\u0131z olsun:<\/p>\n<p><strong>urunler tablosu:<\/strong><\/p>\n<p>| urun_id | urun_adi |<br \/>\n|&#8212;|&#8212;|<br \/>\n| 1 | Telefon |<br \/>\n| 2 | Tablet |<\/p>\n<p><strong>ozellikler tablosu:<\/strong><\/p>\n<p>| ozellik_id | urun_id | ozellik_adi | ozellik_degeri |<br \/>\n|&#8212;|&#8212;|&#8212;|&#8212;|<br \/>\n| 1 | 1 | Renk | Siyah |<br \/>\n| 2 | 1 | Haf\u0131za | 128GB |<br \/>\n| 3 | 2 | Renk | Gri |<br \/>\n| 4 | 2 | Haf\u0131za | 64GB |<\/p>\n<p>A\u015fa\u011f\u0131daki sorgu, her \u00fcr\u00fcn\u00fcn \u00f6zelliklerini JSON format\u0131nda birle\u015ftirir:<\/p>\n<pre class=\"language-sql\"><code>SELECT\n    u.urun_adi,\n    json_agg(json_build_object('ozellik_adi', o.ozellik_adi, 'ozellik_degeri', o.ozellik_degeri)) AS ozellikler\nFROM\n    urunler u\nJOIN\n    ozellikler o ON u.urun_id = o.urun_id\nGROUP BY\n    u.urun_adi;<\/code><\/pre>\n<p><strong>Sonu\u00e7<\/strong><\/p>\n<p><code class=\"language-\">string_agg<\/code> fonksiyonu, PostgreSQL&#8217;de \u00e7oklu s\u00fctunlar\u0131 tek bir string halinde birle\u015ftirmek i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r.  Ancak, b\u00fcy\u00fck tablolarla \u00e7al\u0131\u015f\u0131rken performans sorunlar\u0131na dikkat etmek \u00f6nemlidir.  \u0130ndeksler, <code class=\"language-\">WHERE<\/code> klauzu, alt sorgular\u0131n optimizasyonu ve JSON kullan\u0131m\u0131 gibi teknikler, performans\u0131 art\u0131rmaya yard\u0131mc\u0131 olabilir.  Bu makalede ele al\u0131nan \u00f6rnekler ve teknikler, farkl\u0131 senaryolarda <code class=\"language-\">string_agg<\/code> fonksiyonunu etkin bir \u015fekilde kullanman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<p><strong>S\u0131k\u00e7a Sorulan Sorular:<\/strong><\/p>\n<p>1. <strong><code class=\"language-\">string_agg<\/code> fonksiyonu NULL de\u011ferleri nas\u0131l ele al\u0131r?<\/strong>  NULL de\u011ferleri dikkate almaz.<br \/>\n2. <strong>\u00c7ok b\u00fcy\u00fck stringler olu\u015fturmaktan nas\u0131l ka\u00e7\u0131n\u0131l\u0131r?<\/strong>  String uzunlu\u011funu s\u0131n\u0131rlamak i\u00e7in fonksiyonlar kullan\u0131n.<br \/>\n3. <strong><code class=\"language-\">string_agg<\/code> fonksiyonunun performans\u0131n\u0131 nas\u0131l optimize ederim?<\/strong> \u0130ndeksler, <code class=\"language-\">WHERE<\/code> klauzu ve alt sorgular\u0131n optimizasyonu ile.<br \/>\n4. <strong>Farkl\u0131 karakter kodlamalar\u0131 kullanan s\u00fctunlar\u0131 birle\u015ftirirken sorun ya\u015farsam ne yapmal\u0131y\u0131m?<\/strong>  Karakter kodlamalar\u0131n\u0131 kontrol edin ve gerekti\u011finde d\u00f6n\u00fc\u015ft\u00fcrme yap\u0131n.<br \/>\n5. <strong><code class=\"language-\">string_agg<\/code> yerine JSON kullanman\u0131n avantajlar\u0131 nelerdir?<\/strong>  Daha karma\u015f\u0131k veri yap\u0131lar\u0131n\u0131 tek bir alanda saklama ve daha kolay i\u015fleme imkan\u0131 sa\u011flar.<\/p>\n<p>Yazar: Fatih Soysal<\/p>\n","protected":false},"excerpt":{"rendered":"# PostgreSQL&#8217;de string_agg ile \u00c7oklu S\u00fctun Birle\u015ftirme PostgreSQL veritaban\u0131n\u0131zda birden fazla s\u00fctunu tek bir sat\u0131ra birle\u015ftirmeniz mi gerekiyor?&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[644],"tags":[],"class_list":{"0":"post-26953","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-postgresql","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>PostgreSQL: Birden \u00c7ok S\u00fctunla string_agg Kullan\u0131m\u0131<\/title>\n<meta name=\"description\" content=\"Hi\u00e7bir etiketi bulunamad\u0131.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PostgreSQL: Birden \u00c7ok S\u00fctunla string_agg Kullan\u0131m\u0131\" \/>\n<meta property=\"og:description\" content=\"Hi\u00e7bir etiketi bulunamad\u0131.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-08-03T06:15:26+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"PostgreSQL: Birden \u00c7ok S\u00fctunla string_agg Kullan\u0131m\u0131\",\"datePublished\":\"2025-08-03T06:15:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/\"},\"wordCount\":1076,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"PostgreSQL\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/\",\"name\":\"PostgreSQL: Birden \u00c7ok S\u00fctunla string_agg Kullan\u0131m\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-08-03T06:15:26+00:00\",\"description\":\"Hi\u00e7bir etiketi bulunamad\u0131.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PostgreSQL: Birden \u00c7ok S\u00fctunla string_agg Kullan\u0131m\u0131\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"PostgreSQL: Birden \u00c7ok S\u00fctunla string_agg Kullan\u0131m\u0131","description":"Hi\u00e7bir etiketi bulunamad\u0131.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/","og_locale":"tr_TR","og_type":"article","og_title":"PostgreSQL: Birden \u00c7ok S\u00fctunla string_agg Kullan\u0131m\u0131","og_description":"Hi\u00e7bir etiketi bulunamad\u0131.","og_url":"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-08-03T06:15:26+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"6 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"PostgreSQL: Birden \u00c7ok S\u00fctunla string_agg Kullan\u0131m\u0131","datePublished":"2025-08-03T06:15:26+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/"},"wordCount":1076,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["PostgreSQL"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/","url":"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/","name":"PostgreSQL: Birden \u00c7ok S\u00fctunla string_agg Kullan\u0131m\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-08-03T06:15:26+00:00","description":"Hi\u00e7bir etiketi bulunamad\u0131.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/postgresql-birden-cok-sutunla-string_agg-kullanimi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"PostgreSQL: Birden \u00c7ok S\u00fctunla string_agg Kullan\u0131m\u0131"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/26953","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=26953"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/26953\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=26953"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=26953"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=26953"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}