web-dev-qa-db-ja.com

MySQLが複数の列の異なる値をカウントする

ユーザーがドメイン内のコンピューターにログインするたびに実行するスクリプトを作成しました。このスクリプトは、ユーザーとログインしたコンピューターの記録を作成します。任意の数のユーザーが任意の数のコンピューターにログインできます。

私はこのIT環境をもはや存在しないコンサルタントから継承しました。この小さなクエリを書いているので、ユーザーから電話を受けたときに、そのユーザーの名前で検索し、どのコンピューターを使用しているかを合理的に予測できます特定のコンピューターにログインした回数。

「ログイン」テーブルのデータのサンプルを次に示します。

    COMPUTER        USER
    ncofp02         lee
    ncofp02         lee
    ncofp02         andy
    ncodc01         andy
    ncodc01         andy
    ncodc01         lee

私が注目しているのは、複数の列にわたって異なる値をカウントするロジックです。次のような結果が見たいです:

    COMPUTER       USER   COUNT
    ncofp02        lee    (2)
    ncofp02        andy   (1)
    ncodc01        lee    (1)
    ncodc01        andy   (2)

Mysql内の単一のクエリでこれを達成する方法はありますか、またはPHPのループを開始する必要がありますか? (booooo!)

22
user3140879

GROUP BY句に複数の列をリストするだけです。

SELECT computer, user, count(*) AS count
FROM login
GROUP BY computer, user
46
Barmar

これを試して:

SELECT l.computer, l.user, COUNT(DISTINCT l.computer, l.user) AS count
FROM login l 
GROUP BY l.computer, l.user
6
Saharsh Shah

簡単!

SELECT 
    computer, user, COUNT(DISTINCT computer, user) AS count
FROM 
    login 
0
Snaver