最近我在測驗中收到了這個問題,即使在測驗完成后我自己嘗試后也無法找到解決方案。
我有 3 張桌子:
PEOPLE
---- ------- ----------
| ID | NAME |COMPANY_ID|
------------ ----------
| 1 |George | C1 |
| 2 | Jim | C2 |
| 3 | John | C3 |
---- ------- ----------
COMPANY
---------------- -----------
| ID | NAME |LOCATION_ID|
---------------- -----------
| C1 |Water-Based| L1 |
| C2 |Gas-Giant | L1 |
| C3 |Fire-Proof | L2 |
---- ----------- -----------
LOCATION
---- -----------
| ID | COMPANY_ID|
---- -----------
| L1 | C1 |
| L1 | C2 |
| L2 | C3 |
---- -----------
目標是確定哪個位置擁有最多的公司,然后顯示該位置公司的員工姓名以及他們作業的位置。
我試圖做一個子查詢,我計算一個位置在 COMPANY 表中出現的次數,然后顯示在那里作業的人和公司,但我似乎做錯了,這是我的代碼:
SELECT PEOPLE.NAME AS EMPLOYEE, t.NAME AS COMPANY
FROM(SELECT *,COUNT(LOCATION_ID) OVER(PARTITION BY LOCATION_ID) AS LCOUNT FROM COMPANY) AS t
JOIN PEOPLE
ON PEOPLE.COMPANY_ID = t.ID;
預期結果:
------ -----------
| NAME | COMPANY |
------------------
|George|Water-Based|
|Jim |Gas-Giant |
------ -----------
非常感謝任何幫助和建議,謝謝。
uj5u.com熱心網友回復:
這種方法將首先找到所有丟失公司的位置,即使有很多,然后將所有員工與他們的公司一起顯示
SELECT P.NAME AS namy, C.NAME AS company FROM COMPANY C JOIN PEOPLE P ON C.ID=P.COMPANY_ID WHERE LOCATION_ID IN( SELECT `ID` FROM LOCATION GROUP BY `ID` HAVING COUNT(*) = (SELECT COUNT(*) FROM LOCATION GROUP BY `ID` ORDEr By COUNT(*) DESC LIMIT 1))人名 | 公司名稱 :------------ | :----------- 喬治 | 水基 吉姆 | 氣體巨人
db<>在這里擺弄
uj5u.com熱心網友回復:
您可以LOCATION_ID對大多數公司進行子查詢查找,然后將其WHERE用于連接COMPANY和PEOPLE表的查詢。
嘗試這個:
SELECT P.NAME AS PEOPLE_NAME,
C1.NAME AS COMPANY_NAME
FROM COMPANY C1
JOIN PEOPLE P ON C1.ID=P.COMPANY_ID
WHERE C1.LOCATION_ID=(SELECT LOCATION_ID
FROM COMPANY C2
GROUP BY C2.LOCATION_ID
ORDER BY COUNT(ID) DESC LIMIT 1);
演示小提琴
我認為該表LOCATION根本不需要(作為表或在查詢中),因為它與表基本相同COMPANY;都有匹配的公司和位置ID。除非LOCATION表格存盤了唯一的位置ID并且具有自己的位置NAME,并且您想在結果中顯示它,否則LOCATION表格可能是這樣的:
LOCATION
---- ------------
| ID | NAME |
---- ------------
| L1 | Location_1 |
| L2 | Location_2 |
| L3 | Location_3 |
.....
---- -----------
然后:小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/492263.html
上一篇:將元組合并在一起
下一篇:計算mySQL中間隔的平均值
