尝试学习SQL查询

时间:2020-06-07 18:31:54

标签: mysql sql

我对所有SQL查询语言和SQL数据库一般都是新手 所以在挖掘了永恒之后,我似乎仍然无法解决这些问题

我有一组桌子

PERSON(SSN, Name, Surname, BirthDate)
EVALUATION(CodE, Date, City, CompetitionType)
BID(SSN, CodE)
RANKING(CodE, Position, SSN )

我需要进行并运行这3个查询

1)显示在2010年1月期间始终在同一城市进行的评估类型。

2)对于每个竞标“ 3级雇员”类型但未出现在最终排名中的人,请显示SSN,姓名,姓氏以及她未出现在其评估中的评估代码排名。

3)展示进行过至少10个相同类型评估的城市,每个评估至少具有50个出价。

到目前为止,我已经尝试过

1)

SELECT E.CompetitionType
FROM Evaluation E
WHERE E.Date>="01.01.2010" and E.Date <="31.01.2010"```

// I don't know how to check for the same cities

2)

SELECT P.SSN, P.Name, P.Surname, E.CodE,
FROM PERSON P

然后那只是空白...

3)

SELECT *
FROM EVALUATION E
JOIN BID where BID.CodE = E.CodE
HAVING COUNT(*) > 50

再次无法检查相同类型

已更新,以显示到目前为止我已经尝试过的内容

1 个答案:

答案 0 :(得分:1)

问题1是直接聚合查询,在having子句中进行了过滤

select competitionType
from evaluation
where date >= '2010-01-01' and date < '2020-01-01
group by competitionType
having min(city) = max(city)

我会用连接词组查询2,但不存在:

select p.ssn, p.name, p.surname, b.code
from person p
inner join bid b on b.ssn = p.ssn
where not exists (select 1 from ranking r where r.ssn = b.ssn and r.code = b.code)

对于查询3,您可以从evaluation开始,然后在bid子句中对where进行相关子查询,然后按city和{{1 }}并使用competition子句进行过滤:

having