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
值,而存在更多的值。对于您的变体,我排除了不在其中的值。我需要这样做。