The most efficient way is to change the vote options to:
-1 (down)
0 (flat)
1 (up)
Now you can do a SUM() on the field to get the actual score
I would then use a listener to update the score field every time a vote gets saved.
If you really also want to have something on the CRON to make sure it's always correct, then a single query should suffice (instead of 375.000).
untested, but should work:
UPDATE stories s
LEFT JOIN
(
SELECT story_id, SUM(vote) as total
FROM votes
GROUP BY story_id
) v ON s.id = v.story_id
SET s.score = v.total
Update all stories.score fields with the sum of their votes in 1 single query.
note: You can do it with this query as well even if you keep the 1,2,3 values, but you'll need to include some IF checks within the inner query to make sure 2 maps to -1 and 3 maps to 0 to get the correct SUM