SQL select 多个值的 count()

SQL select count() of multiple values

不是 -- 我在 MS Access 中工作,所以 SQL 是有限的。

在我的table中,有两个相关字段。 F1 有一个公司名称,F2 有 8 个文本值之一,这里称为 1-8。

给定一个公司名称,我需要找出每个特定文本值有多少。

例如,给定名称 'company1,' 在 F1 中可能有 50 条带有 'company1' 的记录。在 F2 中,这 50 条记录可能只有文本值 1、3 和 4。

在一个查询(或多个查询)中,我需要

1) 检索 F1 = 'company1'

的所有记录

2) 找到 F2 的所有不同值,其中 F1 = 'company1.' 例如,对于此条件,F2 = 2、3、4 或 7

3) 找出 F2 中每个不同的值重复了多少次。续在上面的例子中,可能有十个 2、十个 3、十个 4 和二十个 7。

流程如下所示 --

用户输入'company1.'查询returns

Value | Count
2     | 10
3     | 10
4     | 10
7     | 20

我的总体想法是使用一个带有子查询的查询生成每个 F2 值的列表,其中 F1 = company1,然后第二个子查询生成该列表中的所有不同值。然后,不知何故,我需要在第一个子查询中搜索第二个查询中每个值的重复次数。

这是一些测试代码。我这里的问题是它 returns [Significance Level:] in (etc...) 的计数,因为它检查该值是否在该子查询中,而不是在该子查询中对每个结果执行主查询。

SELECT count(*)
FROM (
    SELECT [Significance Level:] 
    FROM all_data_tester WHERE 
    [Manufacturer Audited:] = 'Airbus Space & Defense')
WHERE [Significance Level:] in (
     SELECT distinct [Significance Level:]
     FROM all_data_tester
     WHERE [Manufacturer Audited:] = 'Airbus Space & Defense'
);

抱歉,如果这令人困惑,很难解释。我可以澄清任何事情

使用 GROUP BY 子句

SELECT [Significance Level:], Count(*) As Cnt
FROM all_data_tester
WHERE [Manufacturer Audited:] = 'Airbus Space & Defense'
GROUP BY [Significance Level:]
ORDER BY [Significance Level:]

这会为每个显着性水平创建一行,并带有相应的计数。

您还可以通过

获得每个制造商的计数
SELECT [Manufacturer Audited:], [Significance Level:], Count(*) As Cnt
FROM all_data_tester
GROUP BY [Manufacturer Audited:], [Significance Level:]
ORDER BY [Manufacturer Audited:], [Significance Level:]

这会为每个制造商和具有相应计数的显着性水平创建一行。