2016-04-12 9 views
0

私のデータである。SQL複数選択して、グループBYS

enter image description here

私は、以下の条件を満たし、各日付のユニークSessionIdsの数を見つけたい: とき「/トピック」の数1つのsessionid = 1では、同じsessionidの "/ detail"の数も1に等しいので、私の場合は、sessionid = 1(412)が要件を満たす唯一のsessionidです。ここで

は、私が使用したコードは次のとおりです(テーブル名が私たちです)

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 

乱雑なコードについては申し訳ありませんが、それは日付412のために[1,0]をプリントアウトしなければならない、と日付413が、その働いていない。何かアドバイス?多くのthx!

答えて

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!それは魅力として働いた –

1

サブクエリで正しいトラックにいます。構文が少しオフです(たとえば、count()ではなくsum()を使用してください)。group byのキーが正しくありません。しかし、あなたが探しているように見える:和の事、他の部分のヘッドアップのための

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! –