SQL Query用于组合一些行

时间:2014-01-22 07:57:59

标签: sql postgresql group-by

我当前查询的输出如下:

item    number
car     5
bus     4
bicycle 7
kaikias 10

但我需要根据是否是机动车对物品进行分组。但是这些信息不在DB中。我应该明确地说汽车是查询中的一辆汽车。预期产出是:

item   number
motor  9
others 17

如何通过不在DB中的某些属性组合行?

感谢

2 个答案:

答案 0 :(得分:2)

正确的方法是为此信息创建一个新表,按类别加入表和组。

否则你可以用in和case来做类似的事情,但它不能很好地扩展,而且很容易。

像这样:

select
  case when item in ('motor1', 'motor2', '...') then 'motors' else 'others' end item,
  count(*) number
from
  table
group by
  case when item in ('motor1', 'motor2', '...') then 'motors' else 'others' end

答案 1 :(得分:2)

您只能通过数据库中的信息查询和分组项目。您的数据库本身不可能知道汽车有电机或自行车没有电机。

如果可能,我建议您添加一个新列,以保存此类信息。

编辑:

如果您只想表明已知值,可以这样试试:

SELECT CASE WHEN (item = 'car' OR item = 'bus') THEN 'motor' ELSE 'others' END as item, ...
FROM yourTable
...

第一个参数是您的条件,第二个参数是true的值,第三个参数是false的值。