首页 > 解决方案 > 尝试学习 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

再次甚至无法检查相同的类型

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

标签: mysqlsql

解决方案


问题 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使用相关子查询进行过滤,然后通过和聚合并使用子句进行过滤:bidwherecitycompetitionhaving

select e.city, e.competitionType
from evaluation e
where (select count(*) from bid b where b.code = e.code) >= 50
group by e.city, e.competitionType
having count(*) >= 10

推荐阅读