Mysql
右連接從右表留下一行
我正在使用 MariaDB,在我的範例數據庫中,我有兩個表department和emp。
我想顯示所有少於 50 名員工的部門。
在這種情況下,它應該顯示所有部門名稱。
select count(a.deptId),b.deptname from emp as a right join department as b on a.deptId = b.deptId group by a.deptId having count(a.deptId) <= 50 ;
我嘗試了上述查詢,它返回了部門的正確計數,但它神秘地離開了最後一個部門名稱 操作。
誰能解釋我為什麼會這樣?
我的理解: 根據右連接,右側表的所有行將被提取並與另一個表匹配。如果匹配找到的結果將顯示,否則將列印 NULL。
+--------+-------------+ | deptId | deptname | +--------+-------------+ | 501 | HR | | 502 | Accounts | | 503 | Development | | 504 | Operations | +--------+-------------+ +--------+--------+------+-------+--------+ | emp_id | salary | name | bonus | deptId | +--------+--------+------+-------+--------+ | 1 | 850 | NULL | 10 | 501 | | 2 | 920 | NULL | NULL | 502 | | 3 | 550 | NULL | NULL | 501 | | 4 | 450 | NULL | 5 | 502 | | 5 | 800 | NULL | NULL | 501 | | 6 | 920 | NULL | NULL | 502 | | 7 | 155 | NULL | NULL | 501 | | 8 | 50 | NULL | 20 | 501 | +--------+--------+------+-------+--------+
您是按您計數的事物進行分組,而不是按部門名稱。將您的組更改為:
group by b.deptname
編輯:根據要求添加一些風味文本。
基本上正在發生的事情是您選擇聚合其中一個值(在這種情況下是工資的計數),以便它“匯總”,並且 group by 通常指示您要進行匯總的值。
說“我想按員工人數分組”是有道理的,但您實際上是在試圖表達“我想返回按部門分組的員工人數”。