web-dev-qa-db-fra.com

Comptage du nombre de lignes groupées dans mysql

Dans une table xyz, j'ai une rangée appelée composants et une rangée labref qui porte le numéro labref, comme indiqué ici.

Table xyz

labref             component
NDQA201303001          a
NDQA201303001          a
NDQA201303001          a
NDQA201303001          a
NDQA201303001          b
NDQA201303001          b
NDQA201303001          b
NDQA201303001          b
NDQA201303001          c
NDQA201303001          c
NDQA201303001          c
NDQA201303001          c

Je souhaite regrouper les composants, puis compter les lignes renvoyées, ce qui équivaut à 3. J'ai écrit la requête SQL ci-dessous, mais cela n'aide pas mon objectif. Il renvoie 4 pour chaque composant.

SELECT DISTINCT component, COUNT( component ) 
FROM `xyz`
WHERE labref = 'NDQA201303001'
GROUP BY component

La requête retourne

Table xyz

labref         component   COUNT(component)       
NDQA201303001   a           4
NDQA201303001   b           4
NDQA201303001   c           4

Ce que je veux réaliser maintenant est que, à partir du résultat ci-dessus, les lignes sont comptées et 3 sont renvoyées sous forme de nombre de lignes. Toute solution de contournement est appréciée.

41
alphy

Tu as besoin de faire -

SELECT COUNT(*)
FROM(
SELECT DISTINCT component
FROM `multiple_sample_assay_abc`
WHERE labref = 'NDQA201303001'
) AS DerivedTableAlias

Vous pouvez également éviter les sous-requêtes comme suggéré par @ hims056 ici

28
Kshitij

Essayez cette requête simple sans sous-requête:

SELECT COUNT(DISTINCT component) AS TotalRows
FROM xyz
WHERE labref = 'NDQA201303001';

Voir ce SQLFiddle

91
hims056

Pourquoi ne pas utiliser num_rows .

Si vous le faites à l'aide de cette méthode, vous ne devez en aucun cas modifier la requête.

if ($result = $mysqli->query("SELECT DISTINCT component, COUNT( component ) 
    FROM `xyz`
    WHERE labref = 'NDQA201303001'
    GROUP BY component")){

    /* determine number of rows result set */
    $row_cnt = $result->num_rows;

    printf("Result set has %d rows.\n", $row_cnt);

    /* close result set */
    $result->close();
}
0
Mohd Abdul Mujib