mysql - 使用 MySQL 根据另一列中的不同值聚合一列时排除重复行

标签 mysql sql duplicates distinct

鉴于员工表,我需要编写一个查询来获取每个部门的总薪水。表中任何重复的 e_id 都不能被计算两次(在本例中为 Molly)。

表格如下所示:

(请原谅我插入数据表的方式,我是新手在SO上发帖提问)

<style type="text/css">
.tg  {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-0pky{border-color:inherit;text-align:left;vertical-align:top}
.tg .tg-0lax{text-align:left;vertical-align:top}
</style>
<table class="tg">
  <tr>
    <th class="tg-0pky">e_id</th>
    <th class="tg-0lax">l_name</th>
    <th class="tg-0lax">f_name</th>
    <th class="tg-0lax">salary</th>
    <th class="tg-0lax">dept_id</th>
  </tr>
  <tr>
    <td class="tg-0lax">12</td>
    <td class="tg-0lax">grace</td>
    <td class="tg-0lax">Barbara</td>
    <td class="tg-0lax">8400</td>
    <td class="tg-0lax">1</td>
  </tr>
  <tr>
    <td class="tg-0lax">34</td>
    <td class="tg-0lax">Gates</td>
    <td class="tg-0lax">David</td>
    <td class="tg-0lax">8000</td>
    <td class="tg-0lax">1</td>
  </tr>
  <tr>
    <td class="tg-0lax">39</td>
    <td class="tg-0lax">Patrick</td>
    <td class="tg-0lax">Neil</td>
    <td class="tg-0lax">7500</td>
    <td class="tg-0lax">1</td>
  </tr>
  <tr>
    <td class="tg-0lax">45</td>
    <td class="tg-0lax">Park</td>
    <td class="tg-0lax">Molly</td>
    <td class="tg-0lax">8100</td>
    <td class="tg-0lax">2</td>
  </tr>
  <tr>
    <td class="tg-0lax">45</td>
    <td class="tg-0lax">Park</td>
    <td class="tg-0lax">Molly</td>
    <td class="tg-0lax">8100</td>
    <td class="tg-0lax">2</td>
  </tr>
  <tr>
    <td class="tg-0lax">75</td>
    <td class="tg-0lax">Gates</td>
    <td class="tg-0lax">Ryan</td>
    <td class="tg-0lax">8300</td>
    <td class="tg-0lax">2</td>
  </tr>
</table>

期望的输出是:

<style type="text/css">
.tg  {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-s268{text-align:left}
.tg .tg-0lax{text-align:left;vertical-align:top}
</style>
<table class="tg">
  <tr>
    <th class="tg-s268">Uniq_Dept</th>
    <th class="tg-s268">TotalSalary</th>
  </tr>
  <tr>
    <td class="tg-s268">1</td>
    <td class="tg-s268">23900</td>
  </tr>
  <tr>
    <td class="tg-0lax">2</td>
    <td class="tg-0lax">16400</td>
  </tr>
</table>

最佳答案

您可以尝试在子查询中使用 distinct 来删除 dept_id 的重复行,然后执行 SUM

查询#1

SELECT dept_id as Uniq_Dept,SUM(salary) as TotalSalary 
FROM (
  SELECT distinct dept_id, salary
  FROM t 
) t1
GROUP BY dept_id;

| Uniq_Dept | TotalSalary |
| --------- | ----------- |
| 1         | 23900       |
| 2         | 16400       |

View on DB Fiddle

关于mysql - 使用 MySQL 根据另一列中的不同值聚合一列时排除重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52582464/

相关文章:

c - 如何复制指针以指向同一对象

r - 复制 R 中的行

php - 检索存储在关联数组中的 session 值 CodeIgniter

mysql - mssql转mysql出错

mysql - 在 mysql 数据库中查找行和时间戳之间的交集

mysql - 使用 D2RQ 生成 SQL 数据库到 RDF 的映射

php - 使用mysql_fetch_row()生成编辑表单

c# - 自动增量不适用于模型

sql - IN 与 JOIN 大行集

R cbind xts 对象导致添加/重复行