访问中的统计语法

时间:2012-10-16 08:22:20

标签: sql ms-access

我想在我的应用中为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进行计数。

BTW,对于这些表格数据,人们如何使用json组织他们的结构?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

更新:

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

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

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

        NewYork     Chicago     San
food    2           1           1
sport   1           0           0