私のmysqlデータベースには、とinstagram_actions_histories
として2つの重要な列を持つテーブルがあります。次に、countステートメントとcaseステートメントを使用して、s列のカウントを取得します。次に例を示します。action_type
action_name
id
すべてのカウントid
の際にaction_type
等しい1
とaction_name
「のような」等しいです
select `account_id`,
count(case when action_type = 1 and action_name='like' then id else 0 END) as `like`,
count(case when action_type = 1 and action_name='superLike' then id else 0 END) as `superLike`,
count(case when action_type = 2 then id else 0 END) as `follow`,
from `instagram_actions_histories`
where `instagram_actions_histories`.`account_id` in (1)
group by `account_id`
残念ながら、すべての出力が同じであるため、間違った結果が得られます。次に例を示します。
account_id like superLike follow
1 1282 1282 1282
正しい結果は次のようになります。
account_id like superLike follow
1 1282 20 10
一致NULL
する場合は1を数え、一致しない場合は数える必要があります。
SELECT
account_id,
COUNT(CASE WHEN action_type = 1 AND action_name = 'like' THEN 1 END) AS `like`,
COUNT(CASE WHEN action_type = 1 AND action_name = 'superLike' THEN 1 END) AS superLike,
COUNT(CASE WHEN action_type = 2 THEN 1 END) AS follow
FROM instagram_actions_histories
WHERE account_id IN (1)
GROUP BY account_id;
CASE
式の現在のロジックの問題は、COUNT
null以外の値を1つのカウントとしてカウントすることです。したがって、ゼロもカウントされます。
現在のロジックはSUM
、条件付き集計を取得するために使用して機能していることに注意してください。
SUM(CASE WHEN action_type = 1 AND action_name = 'like'
THEN 1 ELSE 0 END) AS `like`
この場合、一致しないレコードの集計をオフにするには、ゼロを合計しても合計に影響しないため、実際にはゼロを使用できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加