0

我习惯于在 t-sql 中编写 group by 查询。在 t-sqlgroup by中,这将生成一个列表,其中具有相同类别文本的项目被分组在一起,然后类别文本组中具有相同类型文本的项目将被分组在一起。但这似乎不是这里发生的事情:

Select   "CategoryText", "TypeText"
from "NewOrleans911Categories"
group by "CategoryText", "TypeText";

这是 postgres 的一些输出。为什么 NA 没有组合在一起?

    CategoryText; TypeText
    "BrokenWindows";"DRUG VIOLATIONS"
    "NA";"BOMB SCARE"
    "Weapon";"DISCHARGING FIREARMS"
    "NA";"NEGLIGENT INJURY"
4

3 回答 3

2

在 t-sql group by 中,这将生成一个列表,其中具有相同类别文本的项目被分组在一起,然后类别文本组中具有相同类型文本的项目将被分组在一起。

在 SQL 中,查询返回的行的顺序是未指定的,除非您在 order by 子句中折腾。通常,您将按照查询返回的顺序获取行,这完全取决于查询计划。(据我所知,t-sql 也这样做。)

无论如何,您都希望添加缺少的 order by 子句以获得预期结果:

Select   "CategoryText", "TypeText"
from "NewOrleans911Categories"
group by "CategoryText", "TypeText"
order by "CategoryText", "TypeText";

或者(我怀疑这是你真正要找的)用 order by 子句替换 group by:

Select   "CategoryText", "TypeText"
from "NewOrleans911Categories"
order by "CategoryText", "TypeText";
于 2013-11-03T20:43:29.583 回答
0

可能您需要这样的查询:

select distinct on ("CategoryText") "CategoryText", "TypeText"
from "NewOrleans911Categories"

因为group by你不能选择不在group by语句中的列。

于 2013-11-03T19:00:36.400 回答
0

您按两列“分组”。只有当记录与两列都匹配时,这些行才会“分组”。

在这种情况下,两个 NA 都有不同的 TypeText,因此它们不会分组。就像使用 distinct 一样,在这种情况下将完成同样的事情。

于 2013-11-03T18:22:51.487 回答