编写正确的mysql查询时出现问题(计数)
我有以下mysql表:编写正确的mysql查询时出现问题(计数),mysql,database,Mysql,Database,我有以下mysql表: Person Car Color ------------------------ 1 Audi Blue 2 BMW Red 3 Honda Blue 4 Audi Red 5 Audi Yellow 6 Audi Blue 我正在尝试选择以下选项: 拥有奥迪
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
要实现我正在做的事情,正确的查询是什么?下面是一个使用子查询的查询,该子查询首先标识颜色
SELECT Person
FROM CarTable t1
JOIN (SELECT color, COUNT(*) c
FROM CarTable
GROUP BY color
HAVING c < 3) t2
USING (color)
select person
from cars
where car='Audi'
and color in (select color
from cars
group by color
having count(color) < 3);
这样的查询会影响速度吗?我在一个大数据库200k+条记录上尝试了相同的逻辑,似乎要花很长时间才能运行。@PeterLur当记录数很大时,包含子查询或联接的查询通常比不包含子查询或联接的查询对性能有影响。这取决于DBMS将其转换为什么执行计划、索引等。我的经验是,与JOIN相比,MySQL在优化方面非常差。但是我的服务器运行的是MySQL 5.1,也许他们在以后的版本中对其进行了改进。谢谢。除了使用派生表,还有其他解决方案吗?