显示那些合计薪水超过13,000的每个工作岗位的合计薪水。排除那些JOB_ID中含有REP的工作岗位,并且用合计月薪排序列表。(查询表-employees)
时间: 2024-10-12 20:16:18 浏览: 13
为了从"employees"表中获取合计薪水超过13,000元,并且排除包含'REP'的JOB_ID,同时按合计月薪降序排列的结果,你可以编写如下的SQL查询:
```sql
SELECT JOB_TITLE, SUM(SALARY) AS MONTHLY_SALARY
FROM employees
WHERE JOB_ID NOT LIKE '%REP%' AND SALARY > 13000
GROUP BY JOB_TITLE
ORDER BY MONTHLY_SALARY DESC;
```
这个查询做了以下几件事:
1. `SELECT JOB_TITLE, SUM(SALARY)`:选择工作岗位标题(JOB_TITLE)以及计算每个人的薪水总和作为月工资(MONTHLY_SALARY)。
2. `FROM employees`:指定数据来源是"employees"表。
3. `WHERE JOB_ID NOT LIKE '%REP%'`:筛选出JOB_ID中不包含'REP'的工作岗位。
4. `AND SALARY > 13000`:添加额外条件,只选取薪水超过13,000元的记录。
5. `GROUP BY JOB_TITLE`:按照工作岗位标题对结果进行分组,以便计算每个职位的合计薪水。
6. `ORDER BY MONTHLY_SALARY DESC`:将结果显示出来,按照合计月薪从高到低排序。
相关问题
[SQL] select LAST_NAME,JOB_ID,SALARY, case JOB_ID when 'IT_PROG' then SALARY*1.1 when 'ST_CLERK' then SALARY*1.15 when 'SA_REP' then SALARY*1.2 from employees; [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'from employees' at line 7
在这个 SQL 语句中,case 表达式需要一个 else 子句来处理除了 IT_PROG、ST_CLERK 和 SA_REP 之外的 JOB_ID 值。如果没有 else 子句,那么当 JOB_ID 不等于这三个值时,就会出现语法错误。以下是修改后的 SQL 语句:
```
SELECT LAST_NAME, JOB_ID, SALARY,
CASE JOB_ID
WHEN 'IT_PROG' THEN SALARY * 1.1
WHEN 'ST_CLERK' THEN SALARY * 1.15
WHEN 'SA_REP' THEN SALARY * 1.2
ELSE SALARY
END
FROM employees;
```
这个 SQL 语句会根据 JOB_ID 的值,计算对应的工资涨幅,如果 JOB_ID 不是 IT_PROG、ST_CLERK 或 SA_REP,则工资不变。注意,case 表达式的语法是:
```
CASE expression
WHEN value_1 THEN result_1
WHEN value_2 THEN result_2
...
[ELSE result_default]
END
```
其中,expression 是一个表达式,value_1、value_2 等是要比较的值,result_1、result_2 等是对应的结果,ELSE 语句是可选的,用于处理未匹配到任何值的情况。
def forward(self, g, feat): with g.local_scope(): g.ndata['h'] = feat g.update_all(self.message_func1, fn.mean(msg='m', out='h')) # g.update_all(self.message_func2, fn.mean(msg='m', out='h')) node_rep = g.ndata['h'] if self.layer_norm: node_rep = self.layer_norm_weight(node_rep) if self.bias: node_rep = node_rep + self.h_bias if self.self_loop: h = self.node_ME(feat, feat) node_rep = node_rep + h if self.activation: node_rep = self.activation(node_rep) node_rep = self.dropout(node_rep) return node_rep
这段代码是 GNNLayer 中的 `forward` 方法的实现。
`` 方法用于执行 GNNLayer 的前向计算。首先,通过 `g.local_scope()` 创建一个本地作用域以确保计算的中结果不会影响其他计算。然后,将输入特征 `feat` 存储在图 `g` 的节点特征字典 `ndata` 中的键 `'h'` 下。
接下来,使用 `g.update_all(self.message_func1, fn.mean(msg='m', out='h'))` 对图 `g` 中的所有边进行消息传递,并使用 `mean` 函数对接收到的消息进行聚合,然后将结果存储在节点特征字典 `ndata` 的键 `'h'` 中。
随后,根据需要对节点特征进行一系列操作。如果 `layer_norm` 为真,则对节点特征进行层归一化操作。如果 `bias` 为真,则对节点特征添加偏置项。如果 `self_loop` 为真,则使用 `node_ME` 对输入特征进行记忆编码,并将结果与节点特征相加。接着,如果提供了激活函数,则对节点特征进行激活操作。最后,对节点特征进行 `dropout` 操作,并将结果返回。
这段代码展示了 GNNLayer 中前向计算的具体实现。在前向计算过程中,首先进行消息传递和聚合操作,然后根据需要对节点特征进行一系列的转换和操作,最终得到更新后的节点表示。这个方法用于更新图神经网络中每一层节点的表示,并将结果传递给下一层进行进一步的计算。
阅读全文