1

ユーザーのアクティビティを記録するテーブルがあります。

AccountID/ContactID/Message/Time/Date がすべて記録されます。通常、メッセージは色、赤、緑などになります...

どの AccountID も複数の ContactID を持つことができます

私が見せたいのは次のようなものです:

AccountID 赤 緑 オレンジ
アカウント1 4 5 0
アカウント2 3 4 1
アカウント3 5 2 1

基本的に、メッセージの個別の数をカウントします

select 
  AccountID, 
  count(distinct message where message = 'RED'), 
  count(distinct message where message = 'Green'), 
  count(distinct message where message = 'Orange') 
from
  activities 
where 
  date like '2013-01%';

しかし、それはエラー1064を返します.mycount(distinct....)が有効に近いとは思いませんが、例や使用すべきものさえ見つかりません. どんな助けでも素晴らしいでしょう、ありがとう。

4

3 に答える 3

2

これを行うには、CASE ステートメントを SUM 集計関数と組み合わせます。例:

select 
  AccountID, 
  sum(case when message = 'red' then 1 else 0 end) red_msgs, 
  sum(case when message = 'green' then 1 else 0 end) green_msgs, 
  sum(case when message = 'orange' then 1 else 0 end) orange_msgs, 
from
  activities 
where 
  `date` like '2013-01%'
group by 
  AccountID;
于 2013-02-11T17:27:23.370 に答える
0

これは、バーニーの代替品の代替品です。if を使用すると読みやすくなります。

select 
  AccountID, 
  sum(if(message = 'red'),1,0) red_msgs, 
  sum(if(message = 'green',1,0)) green_msgs, 
  sum(if(message = 'orange',1,0) orange_msgs, 
from
  activities 
where 
  date like '2013-01%'
group by 
  AccountID;
于 2013-02-11T17:57:40.503 に答える
0

使ってみてくださいCASE:

SELECT AccountID, 
  SUM(CASE message WHEN 'Red' THEN 1 ELSE 0 END) AS Red, 
  SUM(CASE message WHEN 'Green' THEN 1 ELSE 0 END) AS Green,
  SUM(CASE message WHEN 'Orange' THEN 1 ELSE 0 END) AS Orange,
FROM activities 
WHERE date like '2013-01%';
于 2013-02-11T17:29:20.457 に答える