Mysql

右連接從右表留下一行

  • March 9, 2016

我正在使用 MariaDB,在我的範例數據庫中,我有兩個表departmentemp

我想顯示所有少於 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 通常指示您要進行匯總的值。

說“我想按員工人數分組”是有道理的,但您實際上是在試圖表達“我想返回按部門分組的員工人數”。

引用自:https://dba.stackexchange.com/questions/131616