0

我想Point在我的应用程序中做一些统计,这是表格的列Point

id   type   city
1    food   NewYork
2    food   Washington
3    sport  NewYork
4    food   .....

每个点都属于某种类型并位于某个城市。

现在我想计算每种类型在不同城市的点数。

例如,这里有两种类型:foodsport

然后我想知道:

how many points of `food` and `sport` at NewYork
how many points of `food` and `sport` at Washington
how many points of `food` and `sport` at Chicago
......

我试过这个:

select type,count(*) as num from point group by type ;

但我不能按城市分组。

怎么做?

更新

id      type        city
1       food        NewYork
2       sport       NewYork
3       food        Chicago
4       food        San

我想得到这样的东西:

        NewYork     Chicago     San
food    2           1           1
sport   1           0           0

我将使用 html 表格和图表来显示这些数据。

所以我需要进行计数,我可以使用这样的东西:

select count(*) from point where type='food' and city ='San'
select count(*) from point where type='food' and city ='NewYork'
....

但是我认为这是一个坏主意,所以我想知道我是否可以使用 sql 来进行计数。

顺便说一句,对于这些表格数据,人们如何使用 json 组织他们的结构?

4

2 回答 2

1

这就是你想要的:

    SELECT city, 
     COUNT(CASE WHEN [type] = 'food' THEN 1 END) AS FoodCount,
     COUNT(CASE WHEN [type] = 'sport' THEN 1 END) AS SportCount
    FROM point
    GROUP BY city
于 2012-10-16T08:55:44.630 回答
0

更新:

要以聚合的行/列格式获取结果,您需要使用数据透视表。在 Access 中,它称为交叉表查询。您可以使用 Crosstab 查询向导通过漂亮的 UI 生成查询,或者直接切入 SQL:

TRANSFORM COUNT(id) AS CountOfId
   SELECT type
     FROM point
 GROUP BY type
    PIVOT city

分组用于计算每个 id 的数量type。附加PIVOT子句对数据进行city分组,并将每个分组显示在单独的列中。最终结果如下所示:

        NewYork     Chicago     San
food    2           1           1
sport   1           0           0
于 2012-10-16T08:47:39.357 回答