У меня есть запрос, который выглядит следующим образом:РЕЛЬСЫ оптимального качества SQL подзапрос
@inventory = Pack.find_by_sql("SELECT Packs.id, "+
" (SELECT COUNT(*) FROM Stocks WHERE (Stocks.pack_id = Packs.id AND Stocks.status = 'online' AND Stocks.user_id = #{current_user.id})) AS online,"+
" (SELECT COUNT(*) FROM Stocks WHERE (Stocks.pack_id = Packs.id AND Stocks.status = 'offline' AND Stocks.user_id = #{current_user.id})) AS offline,"+
" (SELECT COUNT(*) FROM Stocks WHERE (Stocks.pack_id = Packs.id AND Stocks.status = 'depositing' AND Stocks.user_id = #{current_user.id})) AS depositing,"+
" (SELECT COUNT(*) FROM Stocks WHERE (Stocks.pack_id = Packs.id AND Stocks.status = 'withdrawing' AND Stocks.user_id = #{current_user.id})) AS withdrawing,"+
" (SELECT COUNT(*) FROM Stocks WHERE (Stocks.pack_id = Packs.id AND Stocks.status = 'selling' AND Stocks.user_id = #{current_user.id})) AS selling,"+
" (SELECT COUNT(*) FROM Transactions WHERE (Transactions.pack_id = Packs.id AND Transactions.status = 'buying' AND Transactions.buyer_id = #{current_user.id})) AS buying"+
" FROM Packs WHERE disabled = false")
Я имею в виду, что есть способ сделать новый суб-запрос таким образом, что вместо
SELECT FROM Stocks
выбирает запроса из хранимой таблицы
SELECT FROM (Stocks WHERE (Stocks.pack_id = Packs.id AND Stocks.user_id = #{current_user.id}))
который будет запрошен только раз. Затем материал WHERE Stocks.status = ?
будет применен к этой сохраненной таблице.
Любые помощь ребята?
Пожалуйста, всегда обеспечивают вашу версию Postgres. –
9.1 на данный момент. В какой-то момент я, вероятно, буду обновляться до 9.4. –
[Итак, у вас есть ваш ответ?] (Http://meta.stackexchange.com/a/5235/169168) –