【问题标题】:Sum of multiple union select showing every result and total显示每个结果和总数的多个联合选择的总和
【发布时间】:2021-11-27 21:58:50
【问题描述】:

My SQL 显示多个表中的记录数

 SELECT 'S_MH_DSC_Abandoned' Table_N ,COUNT(*) Count FROM S_MH_DSC_Abandoned
 UNION SELECT 'S_MH_DSC_ExclAbandoned' Table_N, COUNT(*) Count FROM S_MH_DSC_ExclAbandoned
 UNION SELECT 'S_MH_Private_All' Table_N, COUNT(*) Count FROM S_MH_Private_All 

我想显示这个加上上面最后一列中的值的总和。

我试过了

Select 'Sum Total' Table_N, sum(a) as Total from 
(
 SELECT 'S_MH_DSC_Abandoned',COUNT(*) a FROM S_MH_DSC_Abandoned
 UNION SELECT 'S_MH_DSC_ExclAbandoned', COUNT(*) a FROM S_MH_DSC_ExclAbandoned 
 UNION SELECT 'S_MH_Private_All', COUNT(*) a FROM S_MH_Private_All
 )

但只得到总数而没有其他值。

如何同时获得工作计数和总数?

这是使用 QGIS 风格的 SQL - https://sqlite.org/lang.html

【问题讨论】:

  • 请不要发布images 的数据或代码 - 这应该是您问题中的文本
  • 看看this有没有帮助
  • 它看起来像我正在尝试的,但我得到的只是总和而不是单个计数值。这就是我发布结果图像的原因,因此很清楚我得到了什么,而不是结果的文本。我把代码的图片拿出来了。

标签: sql


【解决方案1】:

我不使用 SQLite。

但是,查看它的文档,它看起来好像不知道 ROLLUP(在这种情况下很方便):

SQL> with temp (job, sumsal) as
  2    (select 'Clerk', sum(sal) from emp where job = 'CLERK'   union all
  3     select 'Mgr'  , sum(sal) from emp where job = 'MANAGER' union all
  4     select 'Sale' , sum(sal) from emp where job = 'SALESMAN'
  5    )
  6  select job, sum(sumsal) sumsal
  7  from temp
  8  group by rollup (job);

JOB       SUMSAL
----- ----------
Clerk       4150
Mgr         8275
Sale        5600
           18025

SQL>

因此,用联合来模拟它:

SQL> with temp (job, sumsal) as
  2    (select 'Clerk', sum(sal) from emp where job = 'CLERK'   union all
  3     select 'Mgr'  , sum(sal) from emp where job = 'MANAGER' union all
  4     select 'Sale' , sum(sal) from emp where job = 'SALESMAN'
  5    )
  6  select job, sumsal
  7  from temp
  8  union
  9  select 'Total', sum(sumsal)
 10  from temp;

JOB       SUMSAL
----- ----------
Clerk       4150
Mgr         8275
Sale        5600
Total      18025

SQL>

使用您的查询:

with temp (tname, cnt) as
  (SELECT 'S_MH_DSC_Abandoned'    , COUNT(*) FROM S_MH_DSC_Abandoned     union all
   SELECT 'S_MH_DSC_ExclAbandoned', COUNT(*) FROM S_MH_DSC_ExclAbandoned union all
   SELECT 'S_MH_Private_All'      , COUNT(*) FROM S_MH_Private_All
  )
select tname, cnt
from temp
union
select 'Total', sum(cnt)
from temp;

【讨论】:

    猜你喜欢
    • 2018-06-20
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-23
    • 2013-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多