4

これに対する論理を理解するのにいくつかの問題があります。以下の2つのクエリを参照してください。

クエリ1:

SELECT cId, crId, COUNT(EventType)
FROM Data
WHERE EventType='0' OR EventType='0p' OR EventType='n' OR EventType = 'np'
GROUP BY crId;

クエリ2:

SELECT cId, crId, COUNT(EventType) AS Clicks
FROM Data
WHERE EventType='c'
GROUP BY crId;

クエリ2の最後に取得する列をクエリ1に表示する方法があるかどうか疑問に思っていました。whereステートメントが異なるため、どこに行くのかよくわかりません。動作していません。

前もって感謝します

4

4 に答える 4

5
SELECT cId, crId, 
SUM(CASE WHEN EventType='0' OR EventType='0p' OR EventType='n' OR EventType = 'np' THEN 1 ELSE 0 END) AS Count_1,
SUM(CASE WHEN EventType='c' THEN 1 ELSE 0 END) AS Count_2
FROM Data
WHERE EventType IN ('0','0p','n','np','c')
GROUP BY crId;
于 2013-01-11T14:29:07.347 に答える
2

2番目を相関サブクエリとして使用して、2つを結合できます。

SELECT 
  Data.cId, 
  Data.crId, 
  COUNT(EventType) AS event_type_count,
  click_counts.Clicks
FROM 
  Data
  /* Correlated subquery retrieves the Clicks (EventType 'c') per cId */
  LEFT JOIN  (
    SELECT cId, crId, COUNT(EventType) AS Clicks
    FROM Data
    WHERE EventType='c'
    GROUP BY crId
  ) AS click_count ON Data.cId = click_count.cId AND Data.crId = click_count.crId
/* OR chain replaced with IN() clause */
WHERE Data.EventType IN ('0','0p','n','np')
/* This GROUP BY should probably also include Data.cId... */
GROUP BY Data.crId;
于 2013-01-11T14:26:37.097 に答える
2

これはすべて、テーブルから一度クエリを実行し、CASEステートメントを使用して実行できます。

SELECT  cId, crId, 
        SUM(CASE WHEN EventType IN ('0', '0p', 'n', 'np') THEN 1 ELSE 0 END) as events,
        SUM(CASE WHEN EventType = 'c' THEN 1 ELSE 0 END) as clicks
FROM    Data
WHERE   EventType IN ('0', '0p', 'n', 'np', 'c')
GROUP BY crId;
于 2013-01-11T14:31:28.170 に答える
0

使いたいIN

SELECT cId, crId, COUNT(EventType) as Clicks
FROM Data 

WHERE EventType IN ('0','0p','n','np','c') 
GROUP BY crId;

:)自分を正しい方向に向ける;)

sqlfiddleデモ

select id, crid, 
 count(case when type <> 'c' 
       then crid end) count_others,
 count(case when type ='c' 
       then crid end) count_c
 from tb
 group by crid
 ;
于 2013-01-11T14:25:03.127 に答える