假設我們有如下表:查詢來選擇:誰兩名職工工作在同一家公司
company company_has_employee employee
-------------------------------------------------------------
id company_id id
companzy_name employee_id emplyee_name
如何創建SQL查詢,以檢索任何兩個員工,誰在同一家公司,什麼是作品這家公司?
假設我們有如下表:查詢來選擇:誰兩名職工工作在同一家公司
company company_has_employee employee
-------------------------------------------------------------
id company_id id
companzy_name employee_id emplyee_name
如何創建SQL查詢,以檢索任何兩個員工,誰在同一家公司,什麼是作品這家公司?
假設於爾根·D的連接表是正確的,我將修改查詢
select top 2 company_name, e.employee_name
from compyny c
join company_has_employee ce on ce.company_id = c.id
join employee e on e.id = cs.employee_id
group by company_name
having count(e.id) > 1
這將始終返回頂部2員工
克林斯曼D的原始查詢總是會返回首先和最後一名員工根據他們的ID。
如果你想兩個僱員隨機選擇的,那麼你可以試試這個:
select top 2 company_name, e.employee_name
from compyny c
join company_has_employee ce on ce.company_id = c.id
join employee e on e.id = cs.employee_id
group by company_name
having count(e.id) > 1
order by RAND((e.ID)*DATEPART(millisecond, GETDATE()))
最後一個ORDER BY子句將隨機變化的記錄的順序,你總是會得到一個隨機順序的頂部2。這意味着每次運行查詢時都會選擇2名隨機員工。
select company_name,
min(e.employee_name) as emp1,
max(e.employee_name) as emp2
from compyny c
join company_has_employee ce on ce.company_id = c.id
join employee e on e.id = cs.employee_id
group by company_name
having count(e.id) > 1
請問,請解釋一下,在這種情況下,集合函數(最小值,最大值)是如何工作的? –
你說你需要2名員工,每個公司至少有2名員工。如果你由公司分組,那麼你可以使用min()和max()來爲每個公司獲得2名員工。數據庫將按字母順序使用最小名稱,按字母順序使用最大名稱。 –
你想讓你的SQL隨機選擇任何兩名員工嗎?即每次運行查詢時,結果可能不同。那是對的嗎? – Swagata
就這麼清楚,你想要一個擁有2名員工的公司嗎? – Lamak
我在這裏失去..兩名員工?那意味着公司只有兩名員工或任何兩名員工? – AJP