mysql按字段分组查询,字段的值和数目相同

2024-10-01 00:14:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个SQL表,看起来像这样,但是有几十万行:

+------+---------------------+-----------+------------+--------------+----------+
| id   | timestamp           | lat       | lon        | country_code | city     |
+------+---------------------+-----------+------------+--------------+----------+
| 2231 | 2013-09-22 14:58:32 | 28.179199 | 113.113602 | CN           | Changsha |
| 2232 | 2013-09-22 14:58:32 | 28.179199 | 113.113602 | CN           | Changsha |
| 2233 | 2013-09-22 14:58:32 | 41.792198 | 123.432800 | CN           | Shenyang |
| 2234 | 2013-09-22 14:58:32 | 31.045601 | 121.399696 | CN           | Shanghai |
| 2235 | 2013-09-22 14:58:32 | 45.750000 | 126.650002 | CN           | Harbin   |
| 2236 | 2013-09-22 14:58:32 | 39.928902 | 116.388298 | CN           | Beijing  |
| 2237 | 2013-09-22 14:58:32 | 26.061399 | 119.306099 | CN           | Fuzhou   |
| 2238 | 2013-09-22 14:58:32 | 26.583300 | 106.716698 | CN           | Guiyang  |
| 2239 | 2013-09-22 14:58:32 | 39.928902 | 116.388298 | CN           | Beijing  |
| 2240 | 2013-09-22 14:58:32 | 31.045601 | 121.399696 | CN           | Shanghai |
+------+---------------------+-----------+------------+--------------+----------+

我需要根据时间戳(interval)进行查询,并获取符合该时间间隔的所有记录,计算具有相同城市的行数(并加上任何项目的纬度/经度,对于同一组,它们都是相同的)。目前,我的应用程序代码中只有一个普通的select和组(如下所示),但这很慢,因为它需要向应用程序发送超过几百kb的数据。在

(要聚合的python代码)

^{pr2}$

它按我想要的方式工作,但是很慢。有没有一种方法可以直接使用sql查询来实现这一点?我得到以下JSON输出,我想要类似的输出:

{
    {
        city: "Baotou",
        lon: 109.822197,
        country_code: "CN",
        lat: 40.652199,
        number_of_items: 288
    },
    {
        city: "Beijing,",
        lon: 116.388298,
        country_code: "CN",
        lat: 39.928902,
        number_of_items: 47
    }
}

Tags: ofidnumbercitysql时间codeitems
1条回答
网友
1楼 · 发布于 2024-10-01 00:14:09

这就是你要找的吗?在

select city, lon, country_code, lat, count(*) as number_of_items
from table t
where timestamp between STARTTIMESTAMP and ENDTIMESTAMP
group by city, lon, country_code, lat;

相关问题 更多 >