2016-07-06 7 views
1

私は、ユーザーが異なる会社からログインするシステムを持っています。私はアクティブなユーザーの数と各社のユーザーの合計数を表示するクエリを実行しようとしています。グループによる条件集計クエリby

Usersテーブル:

userIDcompanyIDlastLogin

所望の出力:

companyIDtotalCompanyUsersnumUsersWhoLoggedInWithinLastMonthFromCompany

クエリの試み:

SELECT companyID, COUNT(userID) AS `numUsersWhoLoggedInWithinLastMonth` 
FROM Users 
WHERE IFNULL(TIMESTAMPDIFF(MONTH, lastLogin, NOW()),- 1) = 1 
GROUP BY companyID; 

私は2つの集計関数を持つ方法を理解するのに苦労しています。

+0

列の名前だけでなく、サンプルデータと目的の結果を追加します。 – Blank

+0

完全に良い質問ですが、試みが行われ、列名と作成された試行に基づいて必要なものを視覚化するのは簡単です。すべての質問にサンプルデータが必要なわけではありません。 – mjsqu

答えて

1

あなたは非常に近いです、あなたはちょうどあなたが実行したい条件付き集計に集計関数内の条件を置く必要があります。

SELECT 
companyID, 
COUNT(userID) AS `totalCompanyUsers`, 
SUM(CASE 
    WHEN 
    TIMESTAMPDIFF(MONTH, lastLogin, NOW()) < 1 THEN 1 
    ELSE 0 
END 
) AS `numUsersWhoLoggedInWithinLastMonth` 
FROM Users 
GROUP BY companyID; 

結果はまだcompanyIDでグループ化されたが、第2の集約機能していますユーザーが先月にログインしたかどうかに応じて1と0の合計を実行します。

+0

すべての 'numUsersWhoLoggedInWithinLastMonth'に対して' 0'を返します。 – jamesmstone

+0

これが有効かどうかはわかりませんが、ログインしていないユーザー、つまりアクティブでないユーザーの中には、 'lastLogin'という値'Null' – jamesmstone

+0

私はあなたの' <' for a '> 'を入れ替えました。ありがとう!! – jamesmstone