简体   繁体   English

Count(*)在sql developer(ORACLE)中返回(行号-1)

[英]Count(*) returns (rows number - 1) in sql developer(ORACLE)

I am trying to get this result in sql developer(emp table): 我试图在sql developer(emp table)中得到这个结果:

TOTAL       1980       1981      1982     1983
-------- --------- --------- --------- ---------
14            1        10         2        1

but I am getting : 但我得到了:

TOTAL       1980       1981      1982     1983
-------- --------- --------- --------- ---------
13            1        10         2        1

Counting on the entire table gives me 14: 依靠整个桌子给我14:

SELECT COUNT(*) FROM EMP;

Why does the count in this case return 13 not 14 ? 为什么这种情况下的计数会返回13而不是14?

SELECT COUNT(*) TOTAL,
SUM(DECODE(EXTRACT(YEAR FROM HIREDATE),1980,COUNT(*))) "1980",
SUM(DECODE(EXTRACT(YEAR FROM HIREDATE),1981,COUNT(*))) "1981",
SUM(DECODE(EXTRACT(YEAR FROM HIREDATE),1982,COUNT(*))) "1982",
SUM(DECODE(EXTRACT(YEAR FROM HIREDATE),1983,COUNT(*))) "1983"
FROM EMP GROUP BY HIREDATE;

I think you want conditional aggregation: 我想你想要条件聚合:

SELECT COUNT(*) TOTAL,
       SUM(CASE WHEN EXTRACT(YEAR FROM HIREDATE) = 1980 THEN 1 ELSE 0 END) as "1980",
       SUM(CASE WHEN EXTRACT(YEAR FROM HIREDATE) = 1981 THEN 1 ELSE 0 END) as "198`",
       SUM(CASE WHEN EXTRACT(YEAR FROM HIREDATE) = 1982 THEN 1 ELSE 0 END) as "1982",
       SUM(CASE WHEN EXTRACT(YEAR FROM HIREDATE) = 1983 THEN 1 ELSE 0 END) as "1983"
FROM EMP;

Notes: 笔记:

  • There is no need to GROUP BY HIREDATE . 没有必要GROUP BY HIREDATE You only seem to want one row of output. 您似乎只想要一行输出。
  • DECODE() is Oracle-specific. DECODE()是特定于Oracle的。 The ANSI standard for conditional expressions is CASE . 条件表达式的ANSI标准是CASE
  • You have nested aggregation functions ( COUNT(*) inside SUM() ). 您有嵌套聚合函数( SUM() COUNT(*) SUM() )。 This is the cause of your problem. 这是导致问题的原因。 This version should fix the issue. 此版本应解决此问题。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM