1

私のクエリは以下のとおりです (親子 4 レベル上下で検索します)。このように、単一の「num」値で見つかった行の量を取得します。約 22k 行です。

SELECT COUNT(fts_trip_id) AS num 
FROM feed_trips_se
JOIN departures ON d_departure_id=fts_trip_departure_id
JOIN destinations ON destinations.d_destination_id=d_departure_id
LEFT JOIN destinations AS destChild1 ON destChild1.d_destination_parent_id=destinations.d_destination_id
LEFT JOIN destinations AS destChild2 ON destChild2.d_destination_parent_id=destChild1.d_destination_id
LEFT JOIN destinations AS destChild3 ON destChild3.d_destination_parent_id=destChild2.d_destination_id
LEFT JOIN destinations AS destChild4 ON destChild4.d_destination_parent_id=destChild3.d_destination_id
LEFT JOIN destinations AS destParent1 ON destParent1.d_destination_id=destinations.d_destination_parent_id
LEFT JOIN destinations AS destParent2 ON destParent2.d_destination_id=destParent1.d_destination_parent_id
LEFT JOIN destinations AS destParent3 ON destParent3.d_destination_id=destParent2.d_destination_parent_id
LEFT JOIN destinations AS destParent4 ON destParent4.d_destination_id=destParent3.d_destination_parent_id
WHERE fts_trip_date>=NOW()
ORDER BY fts_trip_date ASC, fts_trip_price ASC

ただし、多くの LEFT JOIN を使用しているため、最大 22k という数字は利用可能なトリップの正しい量ではありません。これらの行を実際の fts_trip_id でグループ化する必要があります。

残念ながら、GROUP BY を実行すると、正しいトリップ数の単一行を取得する代わりに、正しいトリップ数 (~8k) と同じ行数が取得されます。すべての行に数字が表示されます。ほとんどの場合は 1 ですが、10 または 13 も表示されます。

正直なところ、GROUP BY 関数を使用したときに単一行の値が 8k にならない理由がわかりません。誰でも私を助けることができますか?

4

1 に答える 1

7

COUNT(DISTINCT) :を使用COUNT(DISTINCT fts_trip_id)して、ID の数を取得できます。GROUP BY は、各 ID の結果数のカウントを取得するだけです。

于 2012-12-14T15:07:52.620 に答える