使用COUNT(DISTINCT myfield)

时间:2014-05-28 15:54:55

标签: sql vistadb

我对我想要的SELECT查询感到困惑。基本上我的文件每张发票有一个或多个记录,显示其区域。我想知道每个地区有多少发票。

以下是我的表 Table1

的示例
InvNo   Region
A1      1
A2      3
A3      2
A4      1
A5      1
A6      2

运行以下SQL代码可以为我提供我想要的内容但是包含一个我不期望的额外记录 - 并且不想要,显然是空白区域。我不明白为什么会出现这一行。

SELECT Region, COUNT(DISTINCT Invno) as count
    FROM table1
    GROUP BY Region

这是输出

Region  count
        0       ' I do not want this row!
1       3
2       2
3       1

我应该重新编写代码吗?或者这可能是我正在使用的SQL平台(VistaDB)的问题?

更新如果我不调用我的新列countmyCount,则此代码正常工作,即COUNT(DISTINCT Invno) as myCount。这提醒我,应该总是小心一个给变量等的名称。

3 个答案:

答案 0 :(得分:2)

试试这个

SELECT Region, COUNT(DISTINCT Invno) as count
FROM table1
GROUP BY Region
HAVING COUNT(DISTINCT Invno) > 0

答案 1 :(得分:0)

您有一行regioninv_no都是NULL(至少inv_no是)。你可以过滤掉它:

SELECT Region, COUNT(DISTINCT Invno) as count
FROM table1
WHERE Invno is not null
GROUP BY Region;

答案 2 :(得分:0)

对我来说很好。

我用InvNo和null区域尝试了它,并且null InvNo,都是null,甚至是region = 0.计数永远不会返回零,所以我说它是vistadb的一个特性。但我在MySQL上测试过,而不是vistadb。