我想在我的应用中为Point
做一些统计,这是Point
表的列:
id type city
1 food NewYork
2 food Washington
3 sport NewYork
4 food .....
每个点都属于某种类型,位于某个城市。
现在我想计算每种类型的不同城市的点数。
例如,此处有两种类型:food
和sport
。
然后我想知道:
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组织他们的结构?答案 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