2016-04-14 39 views
2

Yalnızca 1 sütun (Ülke) içeren bir tablo (Ülkeler) var. Sadece "RawText" sütununda ilgilenmeme rağmen birkaç sütun içeren bir tablo (Essays) var.Değer tablosu tablosu sayma

Ben hali hazırda aşağıdaki çalıştırabilirsiniz:

select count(Id) Occurences 
from Essays 
where Essays.RawText like '%canada%'; 

İsterdim 1 sorguyu çalıştırmak edebilmek için o ülkelerin uzun listesini yineler. İdeal

Böyle bir tablo dönmek mümkün olurdu:

Canada 10 
USA 45 
Mexico 39 

...

nasıl tüm ülkeler için arama gitmek mi?

+2

Bir Grup Aradığınızı Görünüyor. – David

cevap

0

almak için Her kompozisyon ve ülke birleşimi, her iki tabloyu bir araya getirin. LIKE modeli ülke isminden oluşturulabilir; SQL'de dize birleştirme || olduğunu. Arama sonuçlarını bir araya getirmek için gruplandırmayı kullanın.

SELECT Country, 
     COUNT(*) 
FROM Countries 
JOIN Essays ON RawText LIKE '%' || Country || '%' 
GROUP BY Country; 
+0

Bu tam olarak ihtiyacım olan şey, teşekkürler. – John

0

Sen ayrı bir sütun türüne göre girişlerini saymak için bir GROUP BY kullanabilirsiniz, ancak bir CASE kullanarak farklı cümle içine aramanızı 'binning' ekstra adımı atmaya gerekir:

SELECT 
    RawText 
FROM 
    Essays 
WHERE 
    (Essays.RawText ILIKE '%canada%') OR (Essays.RawText ILIKE '%USA%') 
GROUP BY 
    CASE 
     WHEN Essays.RawText LIKE '%canada%' THEN 'canada' 
     WHEN Essays.RawText LIKE '%USA%' THEN 'USA' 
     ELSE NULL 
    END 
+0

Ve bir makale her iki ülkeden de bahsederken ne olur? –

+0

Buradaki asıl sorun, çok sayıda ülkenin (örneğin benim örneğimde değil) çok fazla olması, bunların hepsinin depolanması için çok fazla çalışılması ve daha sonra eklemelerin veya çıkarılmaları takip etmenin sorunlu olması. – John