我有這兩張表:
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;
但是查詢給了我這個錯誤:
糟糕,OP 忘記包含錯誤訊息。也許他們會編輯問題來解決它。
uj5u.com熱心網友回復:
這應該服務于目的:
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
uj5u.com熱心網友回復:
嘗試這個 :
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;
我只是假設性別確實包含“男性”而不是“M”或“1”
uj5u.com熱心網友回復:
我計算了至少七個明顯的錯別字,這里每個點上方都有星號:
* *
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;
這仍然是不對的,但至少我們已經到了一個可以從有意義的修復開始的地方……首先是你想使用 aGROUP 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;
現在我們離得更近了……但是 having 子句仍然不正確。當我們按人員分組,并計算該組中不同的 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://www.uj5u.com/caozuo/526642.html
標籤:mysqlsql
上一篇:為什么沒有創建此觸發器?
