web-dev-qa-db-fra.com

MySQL Compter les valeurs distinctes sur plusieurs colonnes

J'ai écrit un script qui s'exécute chaque fois qu'un utilisateur se connecte à un ordinateur de notre domaine. Ce script enregistre l'utilisateur et l'ordinateur auquel il s'est connecté. Un nombre illimité d'utilisateurs peuvent se connecter à un nombre illimité d'ordinateurs. 

Je viens d'hériter de cet environnement informatique d'un consultant qui n'est plus dans le coin et j'écris cette petite requête afin que, lorsqu'un utilisateur m'appelle, je puisse effectuer une recherche par nom d'utilisateur et prévoir de manière raisonnable quel ordinateur il utilise. nombre de fois où ils se sont connectés à un ordinateur donné.

Voici un exemple des données de la table 'login':

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

Ce qui me frappe le plus, c'est la logique de compter des valeurs distinctes sur plusieurs colonnes. J'aimerais voir un résultat comme celui-ci:

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

Est-il possible d'accomplir cela avec une requête unique dans mysql, ou devrais-je commencer à mettre en boucle du php? (booooo!)

22
user3140879

Il suffit de lister plusieurs colonnes dans la clause GROUP BY.

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

Essaye ça: 

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

Facile!

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