首页 > 解决方案 > 如何在 Spark SQL 中执行 ALL 函数

问题描述

我只想知道如何在 spark SQL 中执行以下 MySQL 查询。

SELECT first_name,last_name, job_id, salary 
  FROM employees 
 WHERE salary > 
   ALL (SELECT salary FROM employees WHERE job_id = 'SH_CLERK') 
 ORDER BY salary

特殊ALL()功能。

标签: apache-spark-sql

解决方案


ALL 目前不适用于 SPARK SQL。许多人也不会将它与 SQL 一起使用,并且可以将其转换为其他方法。

在这种情况下,MAX 将获得相同的结果,如下所示:

import org.apache.spark.sql.expressions._
import org.apache.spark.sql.functions._

val df = sc.parallelize(Seq(
   ("John", "sh_clerk", 20000), ("Peter", "sh_clerk", 60000), ("Sally", "manager", 50000),
   ("Cabe", "programmer", 100000), ("Bob", "accountant", 65000)
)).toDF("first_name", "job_type", "salary")

df.createOrReplaceTempView("employees")


val res = spark.sql(""" SELECT first_name, job_type, salary 
  FROM employees 
 WHERE salary > 
   (SELECT MAX(salary) FROM employees WHERE job_type = 'sh_clerk') 
 ORDER BY salary""") 

res.show(false)

返回:

+----------+----------+------+
|first_name|job_type  |salary|
+----------+----------+------+
|Bob       |accountant|65000 |
|Cabe      |programmer|100000|
+----------+----------+------+

推荐阅读