您好我有以下数据库scheema
employee (employee-name, street, city)
works (employee-name, company-name, salary)
company (company-name, city)
manages (employee-name, manager-name)
我需要做以下事情,但据我的培训师说,他们错了。
假设公司可能位于多个城市。找到所有公司 位于Small Bank Corporation所在的每个城市。
SELECT company-name, city
FROM company
UNION ALL
SELECT company-name, city
FROM company
WHERE company-name = ‘Small Bank Corporation’
查找所有员工的收入超过所有员工的平均工资 他们的公司。
SELECT employee-name
FROM works
WHERE salary > ( SELECT AVG(w1.salary)
FROM works w1
INNER JOIN works w2
ON w1.company-name = w2.company-name)
找到员工最多的公司。
SELECT company-name
FROM works
GROUP BY company-name
HAVING count(*) = ( SELECT count(*)
FROM works
GROUP BY company-name
ORDER BY count(*) DESC
LIMIT 1)
找到薪资最少的公司。
SELECT company-name
FROM works
GROUP BY company-name
HAVING count(*) < ( SELECT count(*)
FROM works
GROUP BY company-name
ORDER BY count(*) DESC
LIMIT 1)
答案 0 :(得分:1)
假设公司可能位于多个城市。查找位于Small Bank Corporation所在城市的所有公司。
SELECT company-name,city FROM company
WHERE city IN(SELECT city FROM company
WHERE company-name='Small Bank Corporation');
答案 1 :(得分:0)
查找所有员工的收入超过其公司所有员工的平均工资。
SELECT employee-name
FROM works
WHERE salary > ( SELECT AVG(salary)
FROM works )
找到员工最多的公司。
select company-name from works group by company-name having count(*)
= (select max(count(*)) from works group by company-name);
答案 2 :(得分:0)
单个答案需要解决的问题很多,所以我将在第一个示例中列出您出错的地方,如何修复它,以及如何将该策略用于其余示例。您可能希望在Stack Overflow上将剩余的问题拆分为新问题。从上周给出的答案中可以看出,人们不愿意回答整个请求。
所以,问题是:
假设公司可能位于多个城市。找到所有 公司位于Small Bank Corporation所在的每个城市 位于。
第1步:正确阅读提示
当我说这通常是解决这些问题最难的部分时,我会说完全诚意。语言并不总是像我们希望的那样具体,不同的人可以用多种方式解释同一个句子。如果提示中有任何歧义,请务必与教师沟通,并要求他们说明编写查询所需的内容。
第2步:查看错误的内容
因此,您编写的查询无法解决所提出的问题。为什么不?我们可以通过弄清楚查询的完全来开始回答这个问题。我们可以先将其分解为:
SELECT company-name, city
FROM company
上面的代码将从名为“company。”的表格中的每一行获取公司名称和城市。
SELECT company-name, city
FROM company
WHERE company-name = ‘Small Bank Corporation’
上面的代码将从名为company的公司名称为'Small Bank Corporation'的表中的每一行获取公司名称和城市。
UNION ALL
上面的行将创建它之前和之后的选择的并集。因此,您创建了表中所有行的联合,以及公司名称为“Small Bank Corporation”的所有行。这不仅不能解决上面给出的查询,而且还为我们提供了我们没有要求的额外冗余行。我们可以创建一个模型表company
来准确演示它的作用。
company-name | city
--------------------------------
Small Bank Corporation | A
Silly Bank Corporation | B
Large Bank Corporation | C
在这个例子中,我们可以看到Small Bank Corporation是A市唯一的公司。因此,当我们使用WHERE语句指定时,它将是唯一返回的行。因此,当我们结合结果时,我们应该如下所示。
company-name | city
--------------------------------
Small Bank Corporation | A
Silly Bank Corporation | B
Large Bank Corporation | C
Small Bank Corporation | A
哪个不是很有帮助。那么我们该如何解决这个问题?
第3步:了解问题
提示要求找到小型银行公司所在的所有位于每个城市的公司。我对该声明的解释是,在小银行公司所在的每个城市,我们都想要城镇中每家银行的名单。我们的最终结果将是小银行公司所在的每个城镇的所有银行名单。例如,如果银行希望查看其竞争的完整列表,则可能需要此信息。
第4步:修订
现在我们可以开始努力寻找正确的查询。您知道要选择哪些变量,因此我们无需更改第一行。编写查询有很多方法,因此为了增加对SQL的曝光,我将提供现有答案的替代方案。
SELECT A.company_name
FROM company A, company B
WHERE A.city = B.city AND B.company_name = 'Small Bank Corporation'
GROUP BY company_name;
请允许我打破这里发生的事情:
尝试使用我提供的步骤计算其余提示,如果您仍然遇到问题,请随时在此处打开更具体的问题。