Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
sql O如何在oracle中实现以下功能而不创建存储过程?使用_Sql_Oracle_Oracle11g_Average - Fatal编程技术网

sql O如何在oracle中实现以下功能而不创建存储过程?使用

sql O如何在oracle中实现以下功能而不创建存储过程?使用,sql,oracle,oracle11g,average,Sql,Oracle,Oracle11g,Average,ı如何使用employees表获得此结果?对于工资1 employee_id salary a 1 b 1 c 0 d 0 e 0 f 1 您可以按平均工资交叉加入: SELECT employee_id, CASE WHEN salary > avg_salary THEN 1 ELS

ı如何使用employees表获得此结果?对于工资1

employee_id   salary
 a              1
 b              1
 c              0
 d              0
 e              0
 f              1

您可以按平均工资交叉加入:

SELECT     employee_id, 
           CASE WHEN salary > avg_salary THEN 1 ELSE 0 END AS salary
FROM       employee
CROSS JOIN (SELECT AVG(salary)
            FROM   employee)

您可以按平均工资交叉加入:

SELECT     employee_id, 
           CASE WHEN salary > avg_salary THEN 1 ELSE 0 END AS salary
FROM       employee
CROSS JOIN (SELECT AVG(salary)
            FROM   employee)

您可以简单地计算工资的平均值,并将其与案例中每个员工的工资进行比较

比如说,

SQL> SELECT empno,
  2    ename,
  3    CASE
  4      WHEN sal >
  5        (SELECT AVG(sal) FROM emp
  6        )
  7      THEN 1
  8      ELSE 0
  9    END flag
 10  FROM emp;

     EMPNO ENAME            FLAG
---------- ---------- ----------
      7369 SMITH               0
      7499 ALLEN               0
      7521 WARD                0
      7566 JONES               1
      7654 MARTIN              0
      7698 BLAKE               1
      7782 CLARK               1
      7788 SCOTT               1
      7839 KING                1
      7844 TURNER              0
      7876 ADAMS               0
      7900 JAMES               0
      7902 FORD                1
      7934 MILLER              0

14 rows selected.

SQL>
SQL> SELECT empno,
  2         ename,
  3         CASE
  4            WHEN sal > avg(sal) OVER(ORDER BY NULL) THEN
  5               1
  6            ELSE
  7               0
  8         END flag
  9  FROM emp;

     EMPNO ENAME            FLAG
---------- ---------- ----------
      7369 SMITH               0
      7499 ALLEN               0
      7521 WARD                0
      7566 JONES               1
      7654 MARTIN              0
      7698 BLAKE               1
      7782 CLARK               1
      7788 SCOTT               1
      7839 KING                1
      7844 TURNER              0
      7876 ADAMS               0
      7900 JAMES               0
      7902 FORD                1
      7934 MILLER              0

14 rows selected.

SQL>
替代解决方案您可以使用AVG()分析函数

比如说,

SQL> SELECT empno,
  2    ename,
  3    CASE
  4      WHEN sal >
  5        (SELECT AVG(sal) FROM emp
  6        )
  7      THEN 1
  8      ELSE 0
  9    END flag
 10  FROM emp;

     EMPNO ENAME            FLAG
---------- ---------- ----------
      7369 SMITH               0
      7499 ALLEN               0
      7521 WARD                0
      7566 JONES               1
      7654 MARTIN              0
      7698 BLAKE               1
      7782 CLARK               1
      7788 SCOTT               1
      7839 KING                1
      7844 TURNER              0
      7876 ADAMS               0
      7900 JAMES               0
      7902 FORD                1
      7934 MILLER              0

14 rows selected.

SQL>
SQL> SELECT empno,
  2         ename,
  3         CASE
  4            WHEN sal > avg(sal) OVER(ORDER BY NULL) THEN
  5               1
  6            ELSE
  7               0
  8         END flag
  9  FROM emp;

     EMPNO ENAME            FLAG
---------- ---------- ----------
      7369 SMITH               0
      7499 ALLEN               0
      7521 WARD                0
      7566 JONES               1
      7654 MARTIN              0
      7698 BLAKE               1
      7782 CLARK               1
      7788 SCOTT               1
      7839 KING                1
      7844 TURNER              0
      7876 ADAMS               0
      7900 JAMES               0
      7902 FORD                1
      7934 MILLER              0

14 rows selected.

SQL>

您可以简单地计算工资的平均值,并将其与案例中每个员工的工资进行比较

比如说,

SQL> SELECT empno,
  2    ename,
  3    CASE
  4      WHEN sal >
  5        (SELECT AVG(sal) FROM emp
  6        )
  7      THEN 1
  8      ELSE 0
  9    END flag
 10  FROM emp;

     EMPNO ENAME            FLAG
---------- ---------- ----------
      7369 SMITH               0
      7499 ALLEN               0
      7521 WARD                0
      7566 JONES               1
      7654 MARTIN              0
      7698 BLAKE               1
      7782 CLARK               1
      7788 SCOTT               1
      7839 KING                1
      7844 TURNER              0
      7876 ADAMS               0
      7900 JAMES               0
      7902 FORD                1
      7934 MILLER              0

14 rows selected.

SQL>
SQL> SELECT empno,
  2         ename,
  3         CASE
  4            WHEN sal > avg(sal) OVER(ORDER BY NULL) THEN
  5               1
  6            ELSE
  7               0
  8         END flag
  9  FROM emp;

     EMPNO ENAME            FLAG
---------- ---------- ----------
      7369 SMITH               0
      7499 ALLEN               0
      7521 WARD                0
      7566 JONES               1
      7654 MARTIN              0
      7698 BLAKE               1
      7782 CLARK               1
      7788 SCOTT               1
      7839 KING                1
      7844 TURNER              0
      7876 ADAMS               0
      7900 JAMES               0
      7902 FORD                1
      7934 MILLER              0

14 rows selected.

SQL>
替代解决方案您可以使用AVG()分析函数

比如说,

SQL> SELECT empno,
  2    ename,
  3    CASE
  4      WHEN sal >
  5        (SELECT AVG(sal) FROM emp
  6        )
  7      THEN 1
  8      ELSE 0
  9    END flag
 10  FROM emp;

     EMPNO ENAME            FLAG
---------- ---------- ----------
      7369 SMITH               0
      7499 ALLEN               0
      7521 WARD                0
      7566 JONES               1
      7654 MARTIN              0
      7698 BLAKE               1
      7782 CLARK               1
      7788 SCOTT               1
      7839 KING                1
      7844 TURNER              0
      7876 ADAMS               0
      7900 JAMES               0
      7902 FORD                1
      7934 MILLER              0

14 rows selected.

SQL>
SQL> SELECT empno,
  2         ename,
  3         CASE
  4            WHEN sal > avg(sal) OVER(ORDER BY NULL) THEN
  5               1
  6            ELSE
  7               0
  8         END flag
  9  FROM emp;

     EMPNO ENAME            FLAG
---------- ---------- ----------
      7369 SMITH               0
      7499 ALLEN               0
      7521 WARD                0
      7566 JONES               1
      7654 MARTIN              0
      7698 BLAKE               1
      7782 CLARK               1
      7788 SCOTT               1
      7839 KING                1
      7844 TURNER              0
      7876 ADAMS               0
      7900 JAMES               0
      7902 FORD                1
      7934 MILLER              0

14 rows selected.

SQL>

这在语法上是不正确的。用于交叉联接的查询缺少
分组依据
,但在任何情况下都不能使用分组依据。您只需要所有员工的平均工资。@LalitKumarB实际上,您不需要group by,也不需要join子句——这是交叉联接。当然,你是对的——这个查询在语法上是不正确的。编辑并修复。这在语法上是不正确的。用于交叉联接的查询缺少
分组依据
,但在任何情况下都不能使用分组依据。您只需要所有员工的平均工资。@LalitKumarB实际上,您不需要group by,也不需要join子句——这是交叉联接。当然,你是对的——这个查询在语法上是不正确的。编辑和固定。