1

我正在尝试计算 FLOOR 有多少不同的值,但我不希望值“B”计入总数。

这是我当前的代码。它计算有多少不同的楼层,但当有一层时,它包括楼层“B”。

 SELECT COUNT(DISTINCT FLOOR) as NB_FLOORS FROM TABLE_ID

该表看起来像这样:

 FLOOR     ROOM
 B         Bedroom
 1         Kitchen
 1         Bathroom
 2         Bedroom
 2         Bedroom

在这种情况下,结果应该是 2,因为有 2 个楼层(“B”是不计为楼层的地下室)。我目前使用我发布的代码获得 3。

谢谢。

4

3 回答 3

10
SELECT COUNT(DISTINCT FLOOR) as NB_FLOORS FROM TABLE_ID WHERE FLOOR <> 'B'
于 2009-08-27T18:37:00.187 回答
0

如果您想要更通用的解决方案,请使用正则表达式

SELECT COUNT(DISTINCT FLOOR) as NB_FLOORS FROM TABLE_ID WHERE FLOOR REGEXP '[0-9]'

于 2009-08-27T18:46:23.647 回答
0

这是一个依赖于COUNT()忽略 NULL 的解决方案:

SELECT COUNT(DISTINCT CASE FLOOR = 'B' THEN NULL ELSE FLOOR END) AS NB_FLOORS
FROM TABLE_ID;

另一个想法:假设楼层数字总是从 1 开始并且不跳过数字,您可以简单地返回MAX()

SELECT MAX(FLOOR) AS NB_FLOORS FROM TABLE_ID;
于 2009-08-27T18:42:54.853 回答