计算mysql中分组行的数量

时间:2013-05-16 10:06:28

标签: mysql sql count

在xyz表中,我有一行名为components的行和一个labref行,它的labref编号如下所示

表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

我想对组件进行分组,然后计算返回的行数等于3,我编写了下面的SQL查询,但它没有帮助实现我的目标,而是为每个组件返回4

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

查询返回

表xyz

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

我现在想要实现的是,从上面的结果中,对行进行计数,并返回3作为行数,感谢任何解决方法

5 个答案:

答案 0 :(得分:96)

在没有子查询的情况下尝试这个简单的查询:

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

See this SQLFiddle

答案 1 :(得分:32)

你需要做 -

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

您也可以按照@ hims056 here

的建议避免使用子查询

答案 2 :(得分:0)

为什么不使用num_rows

如果使用此方法执行此操作,则无需以任何方式修改查询。

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();
}

答案 3 :(得分:0)

我找到了解决方案。 因此,如果要计数组的数量而不是每个组中的元素的数量,并向结果表中的每个组记录返回重复值,则应在count函数上使用OVER()子句。

因此,例如上述解决方案将是

SELECT component, COUNT(*) OVER() as number_of_components FROM `xyz` 
WHERE labref = 'NDQA201303001' 
GROUP BY component

我想它可以与任何使用GROUP BY的查询一起使用,更多信息,请查看上面的链接。

答案 4 :(得分:-1)

从Laby,组件的xyz组中选择Labref,组件,Count(*)作为计数