大小写,子查询和联接

时间:2016-02-08 23:40:30

标签: mysql sql join

我要做的是获得高于平均时间,平均时间和低于平均时间的所有游乐设施的avg tip_portion。所以返回3行。当我运行它时,它说:

ERROR:  missing FROM-clause entry for table "trip_data"
LINE 11: on trip_data.trip_id= trip_data.trip_id

我已将其更改为trip_data.trip_id= a.trip_id它说:

 ERROR:  column a.trip_id does not exist.

我做错了什么。我能以更简单的方式做到这一点吗?

select 
    AVG(tip / total_fare) as tip_portion, trip_time
from
    (
        select 
            avg(trip_time),
                case
                    when avg(trip_time) > 11.05 then 'Above Average'
                    when avg(trip_time) = 11.05 then 'Average'
                    when avg(trip_time) < 11.05 then 'Below Average'
                end as trip_time_group
        from
            trip_data
    ) as a
        join
    trip_fare ON trip_fare.trip_id = trip_data.trip_id
where
    pickup_date <> '2009-12-25'
group by trip_time;

2 个答案:

答案 0 :(得分:0)

您没有在子查询中返回任何trip_data.trip_id= a.trip_id列。另外,你应该把 trip_fare.trip_id= trip_data.trip_id代替trip_data,因为 -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -keepclassmembers class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } 在主查询中不存在。

答案 1 :(得分:0)

您需要将CASE从子查询移动到主查询中。

SELECT AVG(tip/total_fare) AS tip_portion,
        CASE WHEN trip_time > avg_trip_time THEN 'Above Average'
             WHEN trip_time = avg_trip_time THEN 'Average'
             ELSE 'Below Average'
        END AS trip_time_group
FROM trip_fare
CROSS JOIN (SELECT AVG(trip_time) AS avg_trip_time
            FROM trip_data) AS a
GROUP BY trip_time_group