【问题标题】:Trying to learn SQL Queries尝试学习 SQL 查询
【发布时间】:2020-06-07 18:31:54
【问题描述】:

总的来说,我对所有 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

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

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

【问题讨论】:

  • 到目前为止你尝试过什么?你应该在问之前展示你所做的努力。
  • 您能否添加您为这 3 个问题提出的任何 SQL 查询?不要担心它的正确性。很高兴看到您的尝试。您可能比您想象的更接近解决方案。
  • 您是想仅使用 SQL 来解决这个问题,还是打算使用任何其他语言(如 PHP)来解决它?
  • 感谢您的快速回复!我用我尝试过的查询更新了问题
  • @Ahijit 现在只是自己学习 SQL,以后可能会与 NodeJS 或 Python 一起使用,来自 MongoDB 等 NoSQL 数据库发现 SQL 相当困难......

标签: mysql sql


【解决方案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 开始,在 where 子句中对 bid 的相关子查询进行过滤,然后通过 city 和 competition 聚合并使用 having 子句进行过滤:

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

【讨论】:

  • 在问题 #1 我可以按城市分组吗?没有“有”
  • 好的做法是使用大写的语法:SELECT column_name FROM table_name AS tn WHERE column_name='value';。
  • @John 我一直认为大写关键字是一个偏好问题。使用 IDE 突出显示关键字,很容易知道什么是关键字,什么不是关键字。我发现输入小写字母更快;只是我的偏好。 stackoverflow.com/questions/292026/… 对此进行了一些很好的辩论。
猜你喜欢
  • 2021-09-28
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多