Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编写正确的mysql查询时出现问题(计数)_Mysql_Database - Fatal编程技术网

编写正确的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 我正在尝试选择以下选项: 拥有奥迪

我有以下mysql表:

    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,也许他们在以后的版本中对其进行了改进。谢谢。除了使用派生表,还有其他解决方案吗?