在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作为行数,感谢任何解决方法
答案 0 :(得分:96)
在没有子查询的情况下尝试这个简单的查询:
SELECT COUNT(DISTINCT component) AS TotalRows
FROM xyz
WHERE labref = 'NDQA201303001';
答案 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(*)作为计数