2012-11-05 225 views
0

我从来没有真正的ms访问查询,但今天我需要一个查询。我有2个表格,模型和订单。从第一个表格中,有两个字段值得关注:数字和颜色,从第二个只能等于表格“模型”中数字的值的数字。我需要的是选择最常用的颜色。在MySQL中,这将是像ms-access查询

SELECT models.color, orders.number FROM models 
    INNER JOIN orders ON (orders.number =models.number) 
    group by color 
    order by count(color) desc limit 1 

但在MS-访问似乎没有工作 怎么写查询做同样的事情在MS-访问?

回答

2

试试这个:。

SELECT TOP 1 models.color, COUNT(orders.number) FROM models 
INNER JOIN orders ON (orders.number=models.number) 
GROUP BY models.color 
ORDER BY 2 desc 
+1

当有匹配的计数时,这将返回多于一行。前n与限制n不完全相同 – Fionnuala

+0

适用于我的情况,但它并不重要 –

+0

您可以使用select top 1语句,但请记住,TOP是访问操作的SQL顺序中的最后一件事情,因此请小心查询速度减慢。 –

2

所有你需要的是摆脱限制,并使用顶级代替1:

SELECT Top 1 models.color FROM models 
INNER JOIN orders ON (orders.number =models.number) 
group by color 
order by count(color) Desc 

然而,顶级ň一个警告,在MS Access,顶ñ将返回比赛,所以如果几个项目具有相同的计数,所有将被返回。如果这个不适合,就可以解决这个由一个唯一的ID排序中:也

order by count(color) desc, OrderID 

注意,号码是一个保留字。

+0

这让“试图执行一个查询,不包括指定表达式‘数字’作为一个聚合函数的一部分 –

+0

这工作,但返回一些奇怪的第一行是有1次命中的白色,然后是4次命中的红色 –

+0

事情是,它不应该只返回一行,因为其他的没有相同的计数? –