【问题标题】:ERROR: column "table.column_name" must appear in the GROUP BY clause or be used in an aggregate function错误:列“table.column_name”必须出现在 GROUP BY 子句中或在聚合函数中使用
【发布时间】:2019-10-13 17:34:34
【问题描述】:

我有下表:

SELECT * FROM trips_motion_xtics
+------------+---------+-------------+------------+-------------+------------+-----+------------------+------------------+-------+--------------+-------+-------------+
| session_id | trip_id |  lat_start  |  lat_end   |  lon_start  |  lon_end   | alt |     distance     | segments_length  | speed | acceleration | track | travel_mode |
+------------+---------+-------------+------------+-------------+------------+-----+------------------+------------------+-------+--------------+-------+-------------+
|        652 |  303633 | 41.1523521  | 41.1524966 | -8.6097233  | -8.6096833 |   0 | 42.7424443438547 | 28.0353622436523 |     0 | 74.208       |     0 | foot        |
|        652 |  303633 | 41.1523521  | 41.1524966 | -8.6097233  | -8.6096833 |   0 | 42.7424443438547 | 28.0353622436523 |     0 | 74.154       |     0 | foot        |
|        652 |  303633 | 41.1523521  | 41.1524966 | -8.6097233  | -8.6096833 |   0 | 42.7424443438547 | 28.0353622436523 |     0 | 68.226       |     0 | foot        |
|        656 |  303637 | 41.14454009 | 41.1631127 | -8.56292593 | -8.5870161 |   0 | 5921.07030809987 | 2785.6088546142  |     0 | 99.028       |     0 | car         |
|        656 |  303637 | 41.14454009 | 41.1631127 | -8.56292593 | -8.5870161 |   0 | 5921.07030809987 | 2785.6088546142  |     0 | 109.992      |     0 | car         |
+------------+---------+-------------+------------+-------------+------------+-----+------------------+------------------+-------+--------------+-------+-------------+

现在想计算 alt, distance, speed ... 列的平均值,以获得 session_id, trip_id, lat_start,.. 的唯一值。

查询:

SELECT DISTINCT(session_id, trip_id, lat_start, lat_end, lon_start, lon_end, travel_mode), AVG(alt) AS avg_alt,  AVG(distance) AS avg_disntance, AVG(speed) AS avg_speed, AVG(acceleration) AS avg_acc FROM akil.trips_motion_xtics;

ERROR:  column "trips_motion_xtics.session_id" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT DISTINCT(session_id, trip_id, lat_start, lat_end, lon...

要求的结果:

+------------+---------+-------------+------------+-------------+------------+-----+------------------+------------------+-------+--------------+-------+-------------+
| session_id | trip_id |  lat_start  |  lat_end   |  lon_start  |  lon_end   | alt |     distance     | segments_length  | speed | acceleration | track | travel_mode |
+------------+---------+-------------+------------+-------------+------------+-----+------------------+------------------+-------+--------------+-------+-------------+
|        652 |  303633 | 41.1523521  | 41.1524966 | -8.6097233  | -8.6096833 |   0 | 42.7424443438547 | 28.0353622436523 |     0 | 72.196       |     0 | foot        |
|        656 |  303637 | 41.14454009 | 41.1631127 | -8.56292593 | -8.5870161 |   0 | 5921.07030809987 | 2785.6088546142  |     0 | 104.51       |     0 | car         |
+------------+---------+-------------+------------+-------------+------------+-----+------------------+------------------+-------+--------------+-------+-------------+

【问题讨论】:

    标签: postgresql join group-by


    【解决方案1】:

    你想要聚合。您将获得GROUP BY 子句中列出的列的每个组合的唯一记录,并且您可以在其他列上应用聚合函数(例如AVG()):

    SELECT 
        session_id, 
        trip_id, 
        lat_start, 
        lat_end, 
        lon_start, 
        lon_end, 
        travel_mode, 
        AVG(alt) AS avg_alt,  
        AVG(distance) AS avg_disntance, 
        AVG(speed) AS avg_speed, 
        AVG(acceleration) AS avg_acc 
    FROM akil.trips_motion_xtics
    GROUP BY
        session_id, 
        trip_id, 
        lat_start, 
        lat_end, 
        lon_start, 
        lon_end, 
        travel_mode
    

    【讨论】:

    • 谢谢,这正是我想要的。
    猜你喜欢
    • 1970-01-01
    • 2014-12-26
    • 2014-01-23
    • 2020-06-11
    • 2020-11-04
    • 2016-09-16
    • 2015-06-22
    • 2018-05-16
    相关资源
    最近更新 更多