我在這裏有兩個關注表:users和race_weeks。用戶有很多race_weeks,race_week屬於User。因此,user_id是race_weeks表中的一個fk。SQL查詢數學體操
我需要在race_weeks表中的字段上執行一些具有挑戰性的數學運算,以便返回具有最多所有時間點的用戶。
以下是我們需要在race_weeks表中操作的字段。
races_won (int)
races_lost (int)
races_tied (int)
points_won (int, pos or neg)
recordable_type(varchar, Robots can race, but we're only concerned about type 'User')
爲了讓您充分了解這裏工作的業務邏輯,用戶可以在一週內參加很多比賽。 race_week記錄代表該周用戶比賽的總結果。如果races_won,races_lost或races_tied大於0,則認爲該用戶在本週內處於活動狀態,否則用戶處於非活動狀態。
因此,這裏就是我們需要在我們的查詢工作要做,以便返回與最高分贏得用戶(實際上net_points_won):
計算每個用戶的net_points_won(而不是在數據庫字段)。
要計算net_points_won,需要(1000 * count_of_active_weeks) - sum(points__won)。 (爲什麼是1000?想象一下,每週用戶都會被發現有1000分可以參加比賽,我們希望將我們發現的用戶分解出來,因爲用戶每週只能輸入一次100分的比賽,坐在900,這究竟是誰贏得了最高分,我們會歪斜。)
這一個是有點令人費解,所以讓我知道如果我能進一步明確。
在您嘗試解決之前,請查看我對Quassnoi的評論。 – keruilin 2010-04-22 17:05:24