0

私はこのようなことをしたい:

SELECT locations.id, places.id, scannables.id, SUM(scannables.available)
FROM `scannables` 
INNER JOIN places ON scannables.place_id = places.id
INNER JOIN locations ON places.location_id = locations.id
WHERE locations.id = 2474 AND scannables.bookdate 
BETWEEN '2009-08-27' and date_add('2009-08-27', INTERVAL 3 DAY)

AND SUM(scannables.available) >= 3

GROUP BY scannables.place_id

これは機能します...「ANDSUM(scannables.available)>=3」を除く

どうやって動かすのかわからない、

4

2 に答える 2

2

MySQL では、集計のエイリアスに対して WHERE を実行できないと思います。クエリの実行後に結果をフィルタリングする HAVING を使用する必要があると思います。

WHERE SUM(...) を使用しても機能しないのはなぜですか?

于 2009-08-27T12:03:52.300 に答える
0

わかりましたので、これはうまくいくようです:

SELECT locations.id, hostels.id, scannables.id, SUM(scannables.available)
FROM `scannables` 
INNER JOIN hostels ON scannables.hostel_id = hostels.id
INNER JOIN locations ON hostels.location_id = locations.id

WHERE locations.id = 2474 AND scannables.bookdate BETWEEN '2009-08-27' and date_add('2009-08-27', INTERVAL 3 DAY)

GROUP BY scannables.hostel_id
HAVING SUM(scannables.available) > 3

GROUPに続くHAVING

ありがとう!

于 2009-08-27T12:14:38.993 に答える