我有两张桌子:
Staff (staffNo(PK), fName, lname, gender, DOB, salary, intTelNo)CarPurchase (purchaseNo(PK), registrationNo(FK), customerNo(FK), amount, date, staffNo(FK)).我需要一个SQL查询,列出所有销售超过10辆汽车的男性员工的姓名。
我试过这个:
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忘了包含错误消息。也许他们会编辑这个问题来解决这个问题。
发布于 2022-11-03 15:06:29
试试这个:
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”
发布于 2022-11-03 15:12:44
这样做的目的应该是:
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发布于 2022-11-03 16:00:31
我至少数了七种明显的字体,在这里,每一个点上都有星号:
* *
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;我通常更愿意原谅这种事,但是七岁呢?问题是,电脑是终极的书呆子机器。如果你想作为一名开发人员找到成功的话,你需要学会更精确地对待这些事情。
这是我们清理后的原稿:
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 BY与HAVING子句一起使用。这个GROUP BY应该包括SELECT子句中使用的任何字段,并且应该确保唯一地标识每个组(名称本身通常还不够好)。因此,让我们补充一下:
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。这使我们想到以下几点:
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;现在,至少我们终于有了一个有效的查询。
https://stackoverflow.com/questions/74305007
复制相似问题