it-swarm.com.de

Zählen der Anzahl gruppierter Zeilen in MySQL

In einer Tabelle xyz habe ich eine Zeile namens components und eine labref-Zeile mit der hier gezeigten Labref-Nummer

Tabelle 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

Ich möchte die Komponenten gruppieren und dann die zurückgegebenen Zeilen zählen, die 3 entsprechen. Ich habe die unten stehende SQL-Abfrage geschrieben, aber es hilft nicht, mein Ziel zu erreichen. Stattdessen gibt es 4 für jede Komponente zurück

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

Die Abfrage wird zurückgegeben

Tabelle xyz

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

Was ich jetzt erreichen möchte, ist, dass aus dem obigen Ergebnis die Zeilen gezählt werden und 3 als Anzahl der Zeilen zurückgegeben wird. Jede Problemumgehung wird geschätzt

41
alphy

Sie müssen tun -

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

Sie können auch eine Unterabfrage vermeiden, wie von @ hims056 hier vorgeschlagen.

28
Kshitij

Versuchen Sie diese einfache Abfrage ohne Unterabfrage:

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

Siehe dieses SQLFiddle

91
hims056

Warum nicht num_rows verwenden.

Wenn Sie dies mit dieser Methode tun, müssen Sie die Abfrage in keiner Weise ändern.

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