我不知道什么标题必须在这里正确反映我的问题,我只能描述我想要的。
有一个包含字段的表:
id, name, city
下一行是:
1 John London
2 Mary Paris
3 John Paris
4 Samy London
我想得到这样的结果:
London Paris
Total 2 2
John 1 1
Mary 0 1
Samy 1 0
所以,我需要取name的所有唯一值,并为另一个字段(city)的唯一值找到一个合适的数量,我还想得到每个city的总数
简单的方法是:
1) 获取唯一名称的列表
SELECT DISTINCT name FROM table
2) 获取独特城市的列表
SELECT DISTINCT city FROM table
3) 为每个名字和城市创建一个查询
SELECT COUNT(city) FROM table WHERE name = some_name AND city = some_city
4) 获取总计:
SELECT COUNT(city) FROM table WHERE name = some_name
(我没有测试这些查询,所以这里可能有一些错误,但这只是为了说明这个想法)
因为有3个名字和2个城市->32=6个数据库查询
但是对于一个有100个城市和100个名字的表->100100=10000个对db的查询,这可能需要很多时间。
而且,名字和城市可能会改变,所以,我不能用预定义的名字或城市创建查询,因为每天都是新的,所以,可能不是伦敦和巴黎,而是莫斯科、都灵和柏林。名字也是一样。
如何使用sqlite对原始表进行一两次查询就得到这样的表?
(sqlite:我是为android做的)
2条答案
按热度按时间5uzkadbs1#
@gmb给了我使用
group by
,但正如我在android上为sqlite所做的那样,答案如下:哪里
:london
以及:paris
传递参数,并且countLondon
以及countParis
是响应类的字段ih99xse12#
您可以使用条件聚合获得每个名称的结果。至于total,不幸的是sqlite不支持
with rollup
子句,它将自动生成它。一种解决方法是
union all
另外还有一列用于排序:实际上,子查询可能不是必需的: