2016-04-12 38 views
0

İşte benim veridir:SQL Çoklu Seçer ve Grup Bys

enter image description here

aşağıdaki şartları yerine getirmesi her tarih için benzersiz SessionIDs sayısını bulmak istiyoruz: zaman "/ konu" sayısı Bir oturumid = 1'de, aynı oturumideki "/ detail" sayısı da 1'e eşittir. Bu yüzden benim durumum için sessionid = 1 (412) gereksinimi karşılayan tek oturumdur. İşte

kullandığım kod şudur: Dağınık kodu hakkında

SELECT count(Distinct sessionid) 
from 
    (Select sessionid, count(search like "/topic%") as TN and Count(search like "/detail%") as DN from we GROUP BY date order by date) as my_table 
WHERE TN ==1 and DN=1 

Maalesef (tablo adı biziz), ancak bugüne 412 için [1,0'ı] çıktısını ve tarih 413. kaplaması gerekir onun çalışmıyor. herhangi bir tavsiye? Birçok thx!

cevap

1
SELECT DATE, 
     count(Distinct sessionid) 
FROM (Select sessionid, 
      DATE, 
      SUM(CASE WHEN search like '/topic%' THEN 1 ELSE 0 END) as TN, 
      SUM(CASE WHEN search like '/detail%' THEN 1 ELSE 0 END) as DN 
    from we 
    GROUP BY sessionid, DATE 
    ) as my_table 
WHERE TN = 1 AND DN = 1 
GROUP BY DATE 
+0

thx! bu bir cazibe olarak çalıştı –

1

Alt sorgu ile doğru yoldasınız. Sözdiziminiz biraz kapalı (örneğin count() yerine sum() kullanın) ve group by anahtarları doğru değil. Ama, aradığınız gibi görünüyor: toplamı şey ve diğer parçanın Kafaları için

select date, count(Distinct sessionid) 
from (select date, sessionid, 
      sum(search like "/topic%") as TN, sum(search like "/detail%") as DN 
     from we 
     group by date, sessionid 
    ) t 
whereTN = 1 and DN = 1 
group by date; 
+0

thx! –