在访问中编写一个带有明显计数的查询

问题描述:

我在写一个查询时遇到了一些困难,这意味着要显示生产3个或更多不同速度的笔记本电脑的“制造商”。在访问中编写一个带有明显计数的查询

SELECT DISTINCT Product.maker, Count(Laptop.speed) AS [3+ Different Speeds] 
FROM Laptop INNER JOIN Product ON Laptop.model = Product.model 
WHERE type = "laptop" 
GROUP BY Product.maker 
HAVING Count(*) >= 3; 

这给了我2个正确的“制造商”产生3个或更多型号的笔记本电脑,但是,一个“制造者”,A,产生两个型号的笔记本电脑以相同的速度,使“制造商”必须从下面的结果表中删除。

maker 3+ Different Speeds 
    A    3 
    E    3 

这里就是模型和速度数据存储在笔记本电脑桌:

model speed 
2001 2.00 E 
2002 1.73 E 
2003 1.80 E 
2004 2.00 A 
2005 2.16 A 
2006 2.00 A 

Ë产生前3名,而A产生底部3.我相当肯定,我需要做我的Count函数DISTINCT,但是,我知道Access不支持DISTINCT Count。任何援助/建议将不胜感激!

下面的查询应该可以解决您的问题。

SELECT 
    maker, 
    COUNT(speed) 
FROM(
    SELECT 
     p.maker, 
     l.speed 
    FROM 
     Laptop l 
     INNER JOIN Product p 
      ON l.model = p.model 
    WHERE 
     type = "laptop" 
    GROUP BY 1,2 
    ) foo 
GROUP BY 1 
HAVING COUNT(1) >= 3 

首先你聚集所有速度为同一制造商,所以内部查询会产生:

maker | speed | count 
-------+-------+------- 
E  | 1.73 |  1 
E  | 1.80 |  1 
A  | 2.16 |  1 
E  | 2.00 |  1 
A  | 2.00 |  2 

现在你对每对不同行(制造商,速度),这样就可以简单地运行一个COUNT()超速。

结果

maker | count 
-------+------- 
E  |  3 
A  |  2 

现在消除A和HAVING条款。

+0

在稍微修改了您提供给我的内容后,我能够成功运行它。感谢您的帮助! – Chris 2014-11-03 10:25:35

+0

我很高兴能帮上忙。如果满意,接受答案。你能否让我知道你有什么修改? – 2014-11-03 10:29:45

+0

我刚刚发布了最终的代码。 – Chris 2014-11-03 10:31:44

如果您取出distinct关键字,则您的查询将正常工作。如果您仅由制造商进行分组,那么该查询将仅为每个制造商带回一个记录,而区别实际上是多余的。

+0

这不包括问题。 – 2014-11-03 09:42:43

+0

虽然你说的是正确的,但并不能解决问题。结果仍然显示A和E.A应该省略,因为它会以相同的速度生成两个模型。 – Chris 2014-11-03 09:45:22

这是我想出的WORKING查询,是您提供给我的一个稍微修改过的版本。

SELECT P.maker AS [Maker], Count(L.speed) AS [3+ Different Speeds] 
FROM (SELECT P.maker, L.speed FROM Laptop AS L INNER JOIN Product AS P ON L.model = P.model 
WHERE type = "laptop" 
GROUP BY P.maker, L.speed) 
GROUP BY [Maker] 
HAVING Count(L.speed) >= 3; 

再次感谢!

+0

这实际上正是我写的,但具有不同的格式。我正在使用GROUP BY X别名来指向SELECT语句的列。无论如何,很高兴它的作品。 – 2014-11-03 10:32:00

+1

我注意到了。你有第三次没有必要的Count()函数,但除此之外,它正是我所期待的! – Chris 2014-11-03 10:34:03

+0

你说得对。测试后我忘记将其移除。 – 2014-11-03 10:36:25