response_archive 27 000 000 行の 2 つのテーブルと、4 000 行からなる空港があります。
選択しようとしているフィールド:
- response_archive.min(価格)
- response_archive.avg(価格)
- response_archive.year_week <- (グループ化、索引付け)
- response_archive.from (airport.IATA と結合)
response_archive.to (airport.IATAに参加)
response_archive.from と response_archive.to を同じにすることはできません。
- クエリに示されているように、response_archive.year_week はスパン内にある必要があります。
グループ化に問題があります。response_archive.year_week でグループ化できず、同時に最小/平均価格を取得できません。
これは私の現在のクエリです。最適とはほど遠いもので、実行に約 90 秒かかります。
SELECT
`from`,
`to`,
year_week,
min(price) min_price,
round(AVG(price)) avg_price
FROM response_archive
INNER JOIN airports AS `f` ON (f.IATA = `from`)
INNER JOIN airports AS `t` ON (t.IATA = `to`)
WHERE
year_week < '1310' AND
year_week > '1210' AND
returntrip = 1 AND
adults = 1 AND
children = 0 AND
`price` < 70000 AND
`price` > 80 AND
f.SweCity = 'Stockholm' AND
t.CountryCode = 'US'
GROUP BY year_week
ORDER BY year_week;
現在の結果:
from to year_week min avg
STO NYC 1211 3552 6311
ARN LAX 1212 3097 6496
STO NYC 1213 3532 7379
ARN NYC 1214 3584 6635
STO LAX 1215 3523 5907
STO FLL 1216 3559 5698
STO NYC 1217 3642 5919
最小/平均が正しくないことを除いて。
最初の値が正しいかどうかの比較:
SELECT
min(price) min,
'3532' min_expected,
round(avg(price)) avg,
'7379' avg_expected
FROM
response_archive
WHERE
`from` = 'STO' AND
`to` = 'NYC' AND
year_week = '1213' AND
returntrip = 1 AND
adults = 1 AND
children = 0 AND
`price` < 70000 AND
`price` > 80;
正しい結果:
min min_exp avg avg_exp
3532 3532 5955 7379
誰かが私を方向に向けたり、私が望む結果が得られない理由を説明したりできますか.