首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询列出销售超过10辆汽车的所有男性员工的员工姓名

SQL查询列出销售超过10辆汽车的所有男性员工的员工姓名
EN

Stack Overflow用户
提问于 2022-11-03 14:48:03
回答 3查看 47关注 0票数 -2

我有两张桌子:

代码语言:javascript
复制
Staff (staffNo(PK), fName, lname, gender, DOB, salary, intTelNo)
代码语言:javascript
复制
CarPurchase (purchaseNo(PK), registrationNo(FK), customerNo(FK), amount, date, staffNo(FK)).

我需要一个SQL查询,列出所有销售超过10辆汽车的男性员工的姓名。

我试过这个:

代码语言:javascript
复制
SELECT S.f.Name, S.l.Name
FROM Staff AS S.InnerJoin Car Purchase AS P ON S.staffNo = P.staffNo
WHERE S.gender= “Male”
HAVING COUNT(DISTINCT P.staffNo) \> 10;

但是查询给了我一个错误:

Oops,OP忘了包含错误消息。也许他们会编辑这个问题来解决这个问题。

EN

回答 3

Stack Overflow用户

发布于 2022-11-03 15:06:29

试试这个:

代码语言:javascript
复制
SELECT 
  distinct s.fname, 
  count(cp.purchaseNo) 
FROM 
  staff s 
  JOIN carpurchase cp ON cp.staffNo = s.staffno 
WHERE 
  s.gender = 'Male' 
GROUP BY 
  s.fname 
HAVING 
  count(cp.purchaseno) > 10;

我只是假设性别包含“男性”而不是“男性”或“1”

票数 0
EN

Stack Overflow用户

发布于 2022-11-03 15:12:44

这样做的目的应该是:

代码语言:javascript
复制
SELECT 
  s.staffNo, s.fName 
FROM 
  Staff s 
  JOIN CarPurchase cp ON cp.staffNo = s.staffNo 
WHERE  s.gender = 'Male' 
GROUP BY s.staffNo, s.fName
HAVING count(purchaseNo) > 10
票数 0
EN

Stack Overflow用户

发布于 2022-11-03 16:00:31

我至少数了七种明显的字体,在这里,每一个点上都有星号:

代码语言:javascript
复制
          *         *
SELECT S.f.Name, S.l.Name
               *    *        * 
FROM Staff AS S.InnerJoin Car Purchase AS P ON S.staffNo = P.staffNo
                *
WHERE S.gender= “Male”
                                 *
HAVING COUNT(DISTINCT P.staffNo) \> 10;

我通常更愿意原谅这种事,但是七岁呢?问题是,电脑是终极的书呆子机器。如果你想作为一名开发人员找到成功的话,你需要学会更精确地对待这些事情。

这是我们清理后的原稿:

代码语言:javascript
复制
SELECT S.fName, S.lName
FROM Staff AS S
Inner Join CarPurchase AS P ON S.staffNo = P.staffNo
WHERE S.gender= 'Male'
HAVING COUNT(DISTINCT P.staffNo) > 10;

这仍然不对,但至少现在我们可以从有意义的修复开始.

..。第一个问题是,您希望使用GROUP BYHAVING子句一起使用。这个GROUP BY应该包括SELECT子句中使用的任何字段,并且应该确保唯一地标识每个组(名称本身通常还不够好)。因此,让我们补充一下:

代码语言:javascript
复制
SELECT S.fName, S.lName
FROM Staff AS S
Inner Join CarPurchase AS P ON S.staffNo = P.staffNo
WHERE S.gender= 'Male'
GROUP BY s.staffNo, s.fName, s.lName
HAVING COUNT(DISTINCT P.staffNo) > 10;

现在我们更接近了..。但“拥有”条款仍然不正确。当我们按人员分组,并计算该组中不同的staffNo行时,它总是相同的值,因此HAVING表达式减少为1 > 10。相反,我们希望计算每个组中的购买行。同样,最好以一个独特的键为基础,比如purchaseNo。这样做,我们也可以删除DISTINCT。这使我们想到以下几点:

代码语言:javascript
复制
SELECT S.fName, S.lName
FROM Staff AS S
INNER JOIN CarPurchase AS P ON S.staffNo = P.staffNo
WHERE S.gender= 'Male'
GROUP BY s.staffNo, s.fName, s.lName
HAVING COUNT(purchaseNo) > 10;

现在,至少我们终于有了一个有效的查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74305007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档