Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 计算的结果的COUNT()_Sql_Tsql_Aggregation - Fatal编程技术网

Sql 计算的结果的COUNT()

Sql 计算的结果的COUNT(),sql,tsql,aggregation,Sql,Tsql,Aggregation,我有一个类似这样的问题: SELECT id FROM table1 INNER JOIN ... WHERE ... AND eventtype IN (2000120, 2000121, 2000122, 2000123, 2000130) EXCEPT SELECT id FROM table1 INNER JOIN ... WHERE ... AND eventtype IN (2000123,20001

我有一个类似这样的问题:

SELECT
    id
FROM
    table1
INNER JOIN
    ...
WHERE
    ...
    AND eventtype IN (2000120, 2000121, 2000122, 2000123, 2000130)

EXCEPT

SELECT
    id
FROM
    table1
INNER JOIN
    ...
WHERE
    ...
    AND eventtype IN (2000123,2000130,2000134,2000135)
请注意,除了最后一个where子句外,这两个查询都是相同的

现在我想计算一下上述查询返回的记录数

怎么做


非常感谢

使用
计数
并将其包装在
子查询中

SELECT COUNT(ID)
FROM (
        SELECT id
        FROM table1
        INNER JOIN...
        WHERE...
                AND eventtype IN ( 2000120, 2000121, 2000122, 2000123, 2000130 )
        EXCEPT
        SELECT id
        FROM table1
        INNER JOIN...
        WHERE...
                AND eventtype IN ( 2000123, 2000130, 2000134, 2000135 )
        ) s

还可以将EXISTS与INTERSECT子查询一起使用

SELECT COUNT(ID)
FROM table1 t1 INNER JOIN ...
WHERE ... AND eventtype IN (2000120, 2000121, 2000122, 2000123, 2000130)
AND NOT EXISTS (
SELECT 1
FROM table1 t2 INNER JOIN ...
WHERE ... AND eventtype IN (2000123, 2000130, 2000134, 2000135)
AND EXISTS (SELECT t1.ID 
            INTERSECT
            SELECT t2.ID))  

您只需要对所需内容进行第一次查询,如果不需要,则不必包含2000130值,也不必包含不希望在查询中显示的其他值

SELECT
    id
FROM
    table1
INNER JOIN
    ...
WHERE
    ...
    AND eventtype IN (2000120, 2000121, 2000122, 2000123)
如果需要从some查询中排除某些值,可以使用

    AND eventtype NOT IN (2000130)

但不是两个都同时出现。若要只进行常规计数,请选择计数(id)或子查询(如果需要)。

感谢您的快速回复。这很有效。。。由此产生的一个问题是:由于两个子选择完全相同(除了eventtype)。。。可以优化查询吗?例如,我在两个查询中都有WHERE子句(
eventtime,介于'2013-02-08 00:00:00'和'2013-02-08 23:59:59'
),在查询中只有不同的谓词?对不起,我不明白。这是什么意思?您还需要检索结果集吗?不,只需要检索结果的计数。但是JW提供的解决方案很好。除了我必须选择两次日期和其他条件。很好的尝试。但这实际上不起作用,因为查询更复杂。事实上,“id”被减少为一个
DISTINCT
值,而存在更多的值。对于您的变体,我排除了不在其中的值。我需要这样做。