2013-03-23 132 views
0

我有以下MySQL表:麻烦写正确的MySQL查询(COUNT)

Person Car  Color 
    ------------------------ 
    1  Audi  Blue 
    2  BMW  Red 
    3  Honda Blue 
    4  Audi  Red 
    5  Audi  Yellow 
    6  Audi  Blue 

我想选择以下:

谁拥有奥迪和他们的颜色的人被发现少每个人都超过3次。

结果应该是4人5 &

我尝试以下查询,但我没有得到期望的结果:

SELECT Person FROM CarTable 
WHERE Car = "Audi" 
GROUP BY Color 
HAVING COUNT(*) < 3 

什么是正确的查询,实现我在做什么?

回答

1
SELECT Person 
FROM CarTable t1 
JOIN (SELECT color, COUNT(*) c 
     FROM CarTable 
     GROUP BY color 
     HAVING c < 3) t2 
USING (color) 
+0

感谢这个颜色的子查询的查询。除了使用派生表之外,还有其他解决方案吗? – 2013-03-24 00:30:57

1

下面是使用标识第一

select person 
from cars 
where car='Audi' 
     and color in (select color 
        from cars 
        group by color 
        having count(color) < 3); 
+0

这样的查询可以影响速度吗?我在一个大数据库(200k +记录)上尝试了相同的逻辑,似乎需要永远运行。 – 2013-03-24 00:27:34

+0

@PeterLur当记录数很大时,包含子查询或联接的查询通常会比没有的查询具有更高的性能影响。它取决于DBMS将其转换为什么执行计划,索引等。 – techuser 2013-03-24 00:51:28

+0

我的经验是,与JOIN相比,MySQL在优化IN时相当差。但我的服务器正在运行MySQL 5.1,或许他们已经在更高版本中对其进行了改进。 – Barmar 2013-03-26 04:39:10