【问题标题】:Oracle/SQL - Combining counts from 'unrelated' unrelated tablesOracle/SQL - 组合来自“不相关”不相关表的计数
【发布时间】:2011-04-19 18:37:57
【问题描述】:

假设我有两个表 GOODBAD 存储小部件生产的记录。我的表是这样的

Widget      Good
----------------
Widget A    Y
Widget A    Y
Widget B    Y

Widget      Bad
----------------
Widget A    Y
Widget B    Y

我有这两个基本查询

select count(*) as good from table_good where widget = 'Widget A' and Good = 'Y'
select count(*) as bad from table_bad where widget = 'Widget A' and Bad = 'Y'

这会产生两个这样的表

good
----
2

bad
---
1

我想将这些组合到一个查询中,在该查询中我会得到一个表,其中包含一条看起来像这样的记录

good    bad
-----------
2       1

谁能指点我如何做到这一点。我认为做一个联合并在其他表选择中设置假列就可以了,但我得到了正确的表模式,但有两条单独的记录。

谢谢!

【问题讨论】:

  • @Andriy M - 你是对的,我做了一些测试,GROUP BY 没有像我预期的那样工作。谢谢!

标签: sql oracle count union


【解决方案1】:

试试这个:

SELECT (SELECT COUNT(*) AS good 
        FROM   table_good 
        WHERE  widget = 'Widget A' 
               AND good = 'Y') AS good, 
       (SELECT COUNT(*) AS bad 
        FROM   table_bad 
        WHERE  widget = 'Widget A' 
               AND bad = 'Y')  AS bad 
FROM   dual  

【讨论】:

    【解决方案2】:

    另一种方法是使用FULL JOIN

    SELECT COALESCE(A.widget,B.widget) AS Widget, COUNT(G.*) AS Good, COUNT(B.*) AS Bad
    FROM table_good G
    FULL OUTER JOIN table_bad B
    ON G.widget = B.widget AND A.Good = B.Bad
    WHERE (G.widget = 'Widget A' OR B.Widget = 'Widget A') 
    AND (G.Good = 'Y' OR B.Good = 'Y')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 2016-09-19
      • 2020-11-03
      • 1970-01-01
      • 2015-11-14
      • 1970-01-01
      • 2015-01-14
      相关资源
      最近更新 更多