【问题标题】:Subtraction between two sql queries两个sql查询之间的减法
【发布时间】:2010-12-08 00:37:45
【问题描述】:

我在 MS SQL 中有 2 个查询,它们使用 COUNT 函数返回多个结果。

我可以运行第一个查询并得到第一个结果,然后运行另一个得到另一个结果,减去它们并找到结果;但是有没有办法结合所有 3 个功能并获得 1 个整体结果

如:运行 sql1 运行 sql2 运行 SQL3 (sql1-sql2)?....

我用 xxxx 作为函数尝试了它们,但没有运气。

【问题讨论】:

  • 告诉我们更多关于表格的结构以及您想要获取的数据。也许可以重写查询以仅使用一个查询来选择您想要的内容。
  • 如果您不提供表结构、示例数据、预期输出,您认为我们应该如何帮助您????

标签: sql sql-server tsql subtraction


【解决方案1】:

您应该能够为此使用子查询:

SELECT
    (SELECT COUNT(*) FROM ... WHERE ...)
  - (SELECT COUNT(*) FROM ... WHERE ...) AS Difference

刚刚测试过:

Difference
-----------
45

(1 row(s) affected)

【讨论】:

  • 嗨,我试过这个方法,它在第 4 行给了我 ERROR 1242 (21000):子查询返回超过 1 行。有什么建议吗?
  • 是的。确保只返回一行,否则不能将其用作标量。在这方面,错误消息相当清楚。也许您应该检查您的问题与问题中所述的问题之间的区别是什么。
  • 我正在解决同样的问题,这是我的查询:SELECT (SELECT COUNT(CITY) FROM STATION ) - (SELECT COUNT(CITY) FROM STATION GROUP BY (CITY)) AS Difference跨度>
  • 您是否会在查询中发现额外的group by?您是否自己尝试过子查询?您是否注意到某些可能导致它们无法被视为标量的东西?
【解决方案2】:
SELECT (SELECT COUNT(*) FROM t1) - (SELECT COUNT(*) FROM t2)

【讨论】:

  • 谢谢这解决了它:)...最简单的事情...啊有时
  • 谢谢!它是如此简单,但是当一个简单的减号就足够了时,整个网络上的人们都建议做一些奢侈的 SQL 逻辑来获得它。
  • 还将 DISTINCT 添加到查询中,这就是您的操作方式SELECT (SELECT COUNT(CITY) FROM STATION) - (SELECT COUNT(DISTINCT CITY) FROM STATION)
【解决方案3】:

这将返回差异

SELECT COUNT(Attribute) - COUNT(DISTINCT Attribute) FROM table_name;

【讨论】:

  • 我认为这个答案是不正确的。也许我误解了什么。你能详细说明一下吗?
【解决方案4】:

我知道这是一篇旧帖子,但这是另一个最适合我需要的解决方案(在 firebird 上测试)

SELECT c1-c2 from (select count(*) c1 from t1), (SELECT COUNT(*) c2 from t2);

【讨论】:

    【解决方案5】:

    查询如下:

    SELECT (select COUNT(FIRSTNAME) FROM TRMDW.EMPLOYEE1) - (SELECT COUNT(DISTINCT FIRSTNAME) FROM TRMDW.EMPLOYEE1) as difference from dual;
    

    【讨论】:

      【解决方案6】:

      只需使用您的查询逻辑创建一个内联函数,并让它返回结果。根据需要传入参数。

      【讨论】:

        【解决方案7】:
        select @result = (select count(0) from table1) - (select count(0) from table2)
        

        【讨论】:

          【解决方案8】:
          SELECT
             t1.HowManyInTable1
            ,t2.HowManyInTable2
            ,t1.HowManyInTable1 = t2.HowManyInTable2  Table1_minus_Table2
           from (select count(*) HowManyInTable1 from Table1) t1
            cross join (select count(*) HowManyInTable2 from Table2) t2
          

          【讨论】:

            【解决方案9】:
            SELECT (count(*) from t1) - (count(*) from t2);
            

            这对我有用。

            如果只有一张桌子,你也可以这样做:

            SELECT (count(column1)) - count(column2)) from table; 
            

            【讨论】:

              【解决方案10】:

              这可以在单个查询中完成:

              SELECT COUNT(col_name) - COUNT(DISTINCT col_name) as Difference from table_name;
              

              【讨论】:

              • 嗨桑杰。是的,但您只是在回应前段时间发布的另一个答案。请不要重复现有的答案。
              【解决方案11】:

              查询如下:

              ((SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(m,'/',2),'/',-1) 
              FROM ms WHERE ms.id=t.m_id)-(SELECT COUNT(id) FROM t AS tr WHERE tr.m_id=t.m_id)) AS remaining
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2015-08-17
                • 1970-01-01
                • 1970-01-01
                • 2017-01-30
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多