在表xyz中,我有一行称为组件和一个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
Run Code Online (Sandbox Code Playgroud)
我想对组件进行分组,然后计算返回的行数等于3,我编写了下面的SQL查询,但它没有帮助实现我的目标,而是为每个组件返回4
SELECT DISTINCT component, COUNT( component )
FROM `xyz`
WHERE labref = 'NDQA201303001'
GROUP BY component
Run Code Online (Sandbox Code Playgroud)
查询返回
表xyz
labref component COUNT(component)
NDQA201303001 a 4
NDQA201303001 b 4
NDQA201303001 c 4
Run Code Online (Sandbox Code Playgroud)
我现在想要实现的是,从上面的结果中,行被计数,并返回3作为行数,任何解决方法是值得赞赏的
him*_*056 106
在没有子查询的情况下尝试这个简单的查询:
SELECT COUNT(DISTINCT component) AS TotalRows
FROM xyz
WHERE labref = 'NDQA201303001';
Run Code Online (Sandbox Code Playgroud)
Ksh*_*tij 40
你需要做 -
SELECT
COUNT(*)
FROM
(
SELECT
DISTINCT component
FROM
`multiple_sample_assay_abc`
WHERE
labref = 'NDQA201303001'
) AS DerivedTableAlias
Run Code Online (Sandbox Code Playgroud)
您也可避免子查询通过@ hims056的建议在这里
noj*_*tsi 12
我找到了解决方案。因此,如果您想计算组的数量,而不是每个组中元素的数量,并向结果表中的每个组记录返回重复值,则应该在计数函数上使用OVER()子句。
因此,例如上面的解决方案是
SELECT component, COUNT(*) OVER() as number_of_components FROM `xyz`
WHERE labref = 'NDQA201303001'
GROUP BY component
Run Code Online (Sandbox Code Playgroud)
我想这适用于任何使用 GROUP BY 的查询,附加信息,请检查上面的链接。
| 归档时间: |
|
| 查看次数: |
72882 次 |
| 最近记录: |