【问题标题】:Combine Multiple Sql Queries into one将多个 Sql 查询合并为一个
【发布时间】:2014-07-01 05:49:11
【问题描述】:

我在名为“latest”的 sql 表中有一个名为“status”的列,其中包含五个不同的值 new、deployed、resolved、assigned 和 closed,如下所示

 Status
--------------
  NEW
  NEW
  DEPLOYED
  NEW
  RESOLVED
  ASSIGNED
  ASSIGNED
  RESOLVED
  ASSIGNED
  NEW
  NEW
  RESOLVED
  CLOSED
  ASSIGNED

我想编写一个查询,我可以在其中计算每个单词在“状态”列中出现的次数。目前我在这样的 5 个不同查询中使用 count 函数。

 1)select count(status) from latest where status="NEW";
 2)select count(status) from latest where status="DEPLOYED";
 3)select count(status) from latest where status="RESOLVED";
 4)select count(status) from latest where status="ASSIGNED";
 5)select count(status) from latest where status="CLOSED";

有没有一种方法可以将所有这些查询组合成一个查询,而无需使用连接或联合来获得 5 个不同的计数值??

【问题讨论】:

标签: sql select oracle11g count subquery


【解决方案1】:

问题 1:

SELECT STATUS, COUNT(1) FROM LATEST
GROUP BY STATUS
ORDER BY STATUS;

您的输出将是:

STATUS         COUNT
ASSIGNED       4
CLOSED         1
DEPLOYED       1
NEW            5
RESOLVED       3

要获得包含 5 列的单行输出,您可以使用: 问题 2:

SELECT COUNT(CASE WHEN STATUS='ASSIGNED' THEN 1 END)  ASSIGNED_COUNT,
COUNT(CASE WHEN STATUS='CLOSED' THEN 1 END)  CLOSED_COUNT,
COUNT(CASE WHEN STATUS='DEPLOYED' THEN 1 END)  DEPLOYED_COUNT,
COUNT(CASE WHEN STATUS='NEW' THEN 1 END)  NEW_COUNT,
COUNT(CASE WHEN STATUS='RESOLVED' THEN 1 END)  RESOLVED_COUNT
FROM LATEST

您的输出将是:

ASSIGNED_COUNT   | CLOSED_COUNT | DEPLOYED_COUNT | NEW_COUNT | RESOLVED_COUNT
4                |  1           | 1              | 5         | 3

解释:

  1. 查询 1 可用于可以有任意数量的动态状态的情况。例如,即使存在名为 DEFERRED 的状态,它也会自动包含在内,而不会更改查询。但是,如果说没有状态为“NEW”的记录,则不会返回任何数据。

  2. 查询 2 可用于返回单行中的所有数据。如果要包含新状态,则必须修改查询。如果没有状态记录,则返回 0。 仪表板的理想选择

【讨论】:

    【解决方案2】:

    试试这个很酷的

      Select *
      from
      (
      Select Status,COUNT(*) 'Count'
      from LATEST
      group by Status with rollup
      ) t
      where t.Count is not null
    

    【讨论】:

      【解决方案3】:

      试试这个:

      SELECT l.status, COUNT(1) 
      FROM latest l
      GROUP BY l.status;
      

      SELECT SUM(l.status = 'NEW') AS NEW_STATUS,  
             SUM(l.status = 'DEPLOYED') AS DEPLOYED_STATUS, 
             SUM(l.status = 'RESOLVED') AS RESOLVED_STATUS, 
             SUM(l.status = 'ASSIGNED') AS ASSIGNED_STATUS, 
             SUM(l.status = 'CLOSED') AS CLOSED_STATUS
      FROM latest l;
      

      更新

      使用SELECT...INTO 语句来实现这一点,检查下面的查询

      SELECT SUM(l.status = 'NEW') AS NEW_STATUS,  
             SUM(l.status = 'DEPLOYED') AS DEPLOYED_STATUS, 
             SUM(l.status = 'RESOLVED') AS RESOLVED_STATUS, 
             SUM(l.status = 'ASSIGNED') AS ASSIGNED_STATUS, 
             SUM(l.status = 'CLOSED') AS CLOSED_STATUS 
             INTO NEW_STATUS, DEPLOYED_STATUS, RESOLVED_STATUS, 
                  ASSIGNED_STATUS, CLOSED_STATUS
      FROM latest l;
      

      【讨论】:

      • 通过使用上面的查询,我会得到 5 个不同的计数值吗?我可以将它们存储在 5 个不同的变量中吗??
      【解决方案4】:

      试试这个...

      1.>

      Select Count() as Count,Status from latest where (status='NEW' or status='DEPLOYED' or status='RESOLVED' or status='ASSIGNED' or status='CLOSED ') 按状态分组;*

      2.> select count(status) from latest where (status='NEW' Or status='DEPLOYED' or status='RESOLVED' or status='ASSIGNED' Or status='CLOSED');

      【讨论】:

        猜你喜欢
        • 2012-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-02
        相关资源
        最近更新 更多