我有这样一个示例表:
Year, Make, Model
1991 Honda Accord
1992 Honda Accord
1993 Honda Accord
1993 Ford Explorer
如果我要获取1992-1993年间所有正在生产的Makes,返回的行应该是“ Honda”,因为Ford(在我的示例中)在1993年只生产了一辆汽车,而在1992年没有生产一辆。
关于查询我有什么想法可以使用?
编辑:
使用下面答案中的查询来使用IN语句确实可以,但是当我执行25条IN语句时,所花费的时间太长并且超时。
我从1990 1991开始测试,然后从1990 1991 1992开始测试,等等...当它达到2000左右时,它花费的时间太长并且超时。我确实可以选择只做两年(开始年份和结束年份),但是我担心这样的准确性会不高,因为制造商可能会在开始年份参数甚至结束年度参数中提供汽车的产品,但是介于两者之间的地方没有生产汽车,更糟糕的是,当我开始使用Models而不是make进行此操作时,我肯定必须检查所有年份。
表定义
CREATE TABLE Cars
( year INT,
Make VARCHAR(20),
Model VARCHAR(20)
);
表数据
INSERT INTO Cars
SELECT 1991, 'Alfo', 'Rom'
UNION
SELECT 1992, 'Alfo', 'Rom'
UNION
SELECT 1993, 'Alfa', 'Rom'
UNION
SELECT 1994, 'Alfa', 'Rom'
UNION
SELECT 1992, 'Honda', 'Accord'
UNION
SELECT 1993, 'Honda', 'Accord'
UNION
SELECT 1994, 'Honda', 'Del Sol'
UNION
SELECT 1993, 'Acura', 'Integra'
UNION
SELECT 1994, 'Acura', 'TL'
UNION
SELECT 1993, 'Ford', 'Explorer'
UNION
SELECT 1994, 'Honda', 'Accord';
SQL Fiddle
最佳答案
我从1990 1991开始测试,然后从1990 1991 1992开始测试,等等。
当它达到2000左右时,它花费的时间太长并且超时。我有
只做两年(开始和结束)的选择,但是我
担心不会像制造商可能拥有的产品那样准确
汽车的开始年份参数,甚至结束年份参数,
但是还没有生产介于两者之间的汽车,更糟糕的是,当
我从模型而不是品牌开始做,我肯定有
检查所有年份。
您需要使用HAVING
和COUNT
SELECT t.Make
FROM
(SELECT DISTINCT c.YEAR, c.Make
FROM cars c) t
WHERE t.YEAR IN (1992,1993,1994) -- all the years
GROUP BY t.make
HAVING COUNT(*) = 3 --total number of years
SQL Fiddle Demo
关于mysql - 在返回常见行的MYSQL查询上需要帮助,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26443964/