SQL选择多个值的count()

时间:2017-07-10 20:16:02

标签: sql ms-access ms-access-2016

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

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

考虑到公司名称,我需要找到每个特定文本值的数量。

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

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

1)检索F1 =' company1'

的所有记录

2)找到F2的所有不同值,其中F1 =' company1。'例如,对于这种情况,F2 = 2,3,4或7

3)查找F2中每个不同值的重复次数。续在上面的例子中,可能有十个2,十个3,十个4和二十七个。

这个过程看起来像这样 -

用户输入' company1。'查询返回

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

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

这是一些测试代码。我的问题是它在(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'
);

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

1 个答案:

答案 0 :(得分:1)

使用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:]

这会为每个制造商创建一行,并使用相应的计数创建显着性水平。