mysql中分组行数的计数

nbnkbykc  于 2023-04-10  发布在  Mysql
关注(0)|答案(6)|浏览(144)

在表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返回的行数,任何变通办法是赞赏

khbbv19g

khbbv19g1#

试试这个不带子查询的简单查询:

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

查看此SQLFiddle

v7pvogib

v7pvogib2#

你需要做-

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

您也可以按照@hims056 here的建议避免子查询

aydmsdu9

aydmsdu93#

我找到了解决办法。所以,如果你想计算组的数量,而不是每个组中元素的数量,并返回重复的值到结果表中的每个组记录,你应该在你的count函数上使用OVER()子句。
因此,例如上面的解决方案将是

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

我想这适用于任何使用GROUP BY的查询,附加信息,检查上面的链接。

r8xiu3jd

r8xiu3jd4#

为什么不使用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();
}
wh6knrhe

wh6knrhe5#

还有:

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

它应该返回:
| 拉雷夫|组件|计数|
| --------------|--------------|--------------|
| NDQA201303001|a|四|
| NDQA201303001|B|四|
| NDQA201303001|c|四|
而且,加分(我希望),没有子查询!
Based on this source

fnx2tebb

fnx2tebb6#

选择labref,component,Count(*)作为Counts From xyz Group by labref,component

相关问题