Sql 查询技术。我完全同意,但代码是如此有意,似乎它有一个目的。一个神秘的目的。@AustinMoore。我会采取更保守的方法,不会改变这个问题。您可以编辑问题并指出,jointob是不必要的,但是如果您完全删除它,那么所有的答案看起来都会误导您。COALESC
Sql 查询技术。我完全同意,但代码是如此有意,似乎它有一个目的。一个神秘的目的。@AustinMoore。我会采取更保守的方法,不会改变这个问题。您可以编辑问题并指出,jointob是不必要的,但是如果您完全删除它,那么所有的答案看起来都会误导您。COALESC,sql,oracle,join,count,subquery,Sql,Oracle,Join,Count,Subquery,查询技术。我完全同意,但代码是如此有意,似乎它有一个目的。一个神秘的目的。@AustinMoore。我会采取更保守的方法,不会改变这个问题。您可以编辑问题并指出,jointob是不必要的,但是如果您完全删除它,那么所有的答案看起来都会误导您。COALESCE()在按照您的建议实施时似乎不起作用。我仍然缺少计数为0的类型。COALESCE在这种情况下没有帮助,除非count在子查询b中。使用原始查询中的COUNT,它将永远不会返回NULL,因此合并将不会产生任何效果COUNT列上的所有空值仍将返回
查询技术。我完全同意,但代码是如此有意,似乎它有一个目的。一个神秘的目的。@AustinMoore。我会采取更保守的方法,不会改变这个问题。您可以编辑问题并指出,
join
tob
是不必要的,但是如果您完全删除它,那么所有的答案看起来都会误导您。COALESCE()
在按照您的建议实施时似乎不起作用。我仍然缺少计数为0的类型。COALESCE
在这种情况下没有帮助,除非count
在子查询b
中。使用原始查询中的COUNT
,它将永远不会返回NULL,因此合并将不会产生任何效果COUNT
列上的所有空值仍将返回0。没错,我忽略了这一点。我很确定我现在已经解决了这个问题。COALESCE()
在按照您的建议实现时似乎不起作用。我仍然缺少计数为0的类型。COALESCE
在这种情况下没有帮助,除非count
在子查询b
中。使用原始查询中的COUNT
,它将永远不会返回NULL,因此合并将不会产生任何效果COUNT
列上的所有空值仍将返回0。没错,我忽略了这一点。我很确定我现在已经解决了这个问题。COALESCE()
在按照您的建议实现时似乎不起作用。我仍然缺少计数为0的类型。COALESCE
在这种情况下没有帮助,除非count
在子查询b
中。使用原始查询中的COUNT
,它将永远不会返回NULL,因此合并将不会产生任何效果COUNT
列上的所有空值仍将返回0。没错,我忽略了这一点。我很确定我现在已经解决了这个问题。COALESCE()
在按照您的建议实现时似乎不起作用。我仍然缺少计数为0的类型。COALESCE
在这种情况下没有帮助,除非count
在子查询b
中。使用原始查询中的COUNT
,它将永远不会返回NULL,因此合并将不会产生任何效果COUNT
列上的所有空值仍将返回0。没错,我忽略了这一点。我很确定我现在已经修好了。谢谢!你的回答也解决了我的问题。这与@GordonLinoff的答案类似。不过,由于戈登解释了问题和解决方案,我将选择他的答案作为正确答案。谢谢!你的回答也解决了我的问题。这与@GordonLinoff的答案类似。不过,由于戈登解释了问题和解决方案,我将选择他的答案作为正确答案。谢谢!你的回答也解决了我的问题。这与@GordonLinoff的答案类似。不过,由于戈登解释了问题和解决方案,我将选择他的答案作为正确答案。谢谢!你的回答也解决了我的问题。这与@GordonLinoff的答案类似。然而,由于戈登解释了问题和解决方案,我将选择他的作为正确答案。
TYPE COUNT(DEVICE.NAME)
TYPE1 200
TYPE2 100
TYPE3 50
TYPE COUNT(DEVICE.NAME)
TYPE1 200
TYPE2 100
TYPE3 50
TYPE4 0
TYPE5 0
SELECT device.type, count(device.name)
FROM device
LEFT OUTER JOIN (SELECT type, name
FROM device) b
ON device.name = b.name
WHERE device.changedon < (((SYSDATE - DATE '1970-01-01') * 24 * 60 * 60) - (90 * 24 * 60 * 60))
AND device.status != 6 AND device.status != 8 AND device.status != 13
GROUP BY device.type
ORDER BY count(device.name) DESC;
SELECT d0.type, COALESCE(d.cnt,0) FROM device d0
LEFT OUTER JOIN (
SELECT device.type, count(device.name) AS cnt
FROM device
LEFT OUTER JOIN (SELECT type, name
FROM device) b
ON device.name = b.name
WHERE device.changedon < (((SYSDATE - DATE '1970-01-01') * 24 * 60 * 60) - (90 * 24 * 60 * 60))
AND device.status != 6 AND device.status != 8 AND device.status != 13
GROUP BY device.type) d
ORDER BY COALESCE(d.cnt,0) DESC;
SELECT d.type, count(h471.id)
FROM device d INNER JOIN
(SELECT type, name
FROM device
) b
ON d.name = b.name
WHERE d.changedon < (((SYSDATE - DATE '1970-01-01') * 24 * 60 * 60) - (90 * 24 * 60 * 60)) and
d.status != 6 AND d.status != 8 AND d.status != 13
GROUP BY d.type;
SELECT d.type,
sum(case when d.changedon < (((SYSDATE - DATE '1970-01-01') * 24 * 60 * 60) - (90 * 24 * 60 * 60)) and
d.status != 6 AND d.status != 8 AND d.status != 13
then 1 else 0
end)
FROM device d LEFT OUTER JOIN
(SELECT type, name
FROM device
) b
ON d.name = b.name
GROUP BY d.type;
SELECT type, SUM(COUNT_RESULT)
FROM (
SELECT device.type, 0 COUNT_RESULT
FROM device
UNION ALL
SELECT device.type, count(1)
FROM device, h471
WHERE device.recnum = h471.id
AND device.changedon < (((SYSDATE - DATE '1970-01-01') * 24 * 60 * 60) - (90 * 24 * 60 * 60))
AND device.status != 6 AND device.status != 8 AND device.status != 13
)
GROUP BY type