5

次のスキーマから各バス会社に使用されているバスの平均年齢を見つけるためのクエリを思い付くのに問題があります。

バス会社

company_id | name
 1           NED
 2           JIM

バスタイプ

type_id | date_made
 1        2006-01-26
 2        1999-05-05
 3        2000-09-01

ルート

route_id | bustype | bus_company
 1         2         1
 2         1         1
 3         1         1
 4         3         2
 5         3         2
 6         1         2
 7         2         2

この例では、今日が2013-03-18であると仮定すると、NEDの平均バス年齢は4246.666=4247日です。

クエリ全体はどのようになりますか?

4

2 に答える 2

3

今はテストできませんが、次のようなものです。

-- assuming "date_made" is a pg DATE column
--
   SELECT buscompany.name, ROUND(AVG(CURRENT_DATE - date_made))
     FROM buscompany
LEFT JOIN route
          ON route.bus_company = buscompany.company_id
LEFT JOIN bustype
          ON route.bustype = bustype.type_id
 GROUP BY 1

あなたが望むことをすべきです(tm)。pg で日付を減算すると、日数の差が得られます。

于 2013-03-18T20:29:14.027 に答える
0

以下(私が作成したサンプルテーブルに基づく)は、日数の平均を示しています。

select extract(day from avg(current_date-birthday)) from stuff;

avgは日数ではなく間隔を与えるので、抽出を行いました。

日数ではなく間隔を処理したい場合は、代わりにこれを行うことができます

select avg(age(birthday)) from stuff;
于 2013-03-18T20:51:40.223 に答える