SELECT ROUND(AVG(((total - `order`)/total) * 100), 2) AS score
FROM rankings
INNER JOIN ranking_data
ON ranking_id = rankings.id
AND opinion_id = {$opinion_id}
AND `type` = '{$type}'
INNER JOIN (
SELECT rankings.id, COUNT(*) as total
FROM rankings
INNER JOIN ranking_data
ON ranking_id = rankings.id AND `type` = '{$type}'
WHERE case_id = {$case_id}
) AS total_table ON total_table.id = rankings.id
WHERE case_id = {$case_id};
MySQL表:http://pastebin.com/jKvUrrNi如何使這個MySQL查詢工作?
簡短說明:
這裏的問題是,有兩個部分我需要執行此分級計算。一行,以及相關的行。 COUNT()函數搞亂了我的選擇。在子查詢中,它不允許我選擇開當前排名.id(外部查詢),因爲在過濾發生之前,COUNT函數將結果減少到一行。我需要的是以某種方式將id作爲參數傳遞給子查詢的WHERE子句。這只是獲得理想結果的一個想法,但如果您理解了應用程序,則可能有更好的方法(如下所述)。
朗說明:
Thie應用程序允許用戶排名涉及醫療的情況下,用於統計目的的意見。有兩種類型的排名按照相同的方式計算 - 預參考和後參考。這反映了用戶在看到引用(在案例表中)和之後選擇排列意見的方式。 opinion_list目前沒有使用。
排名表存儲了經歷排名過程的用戶的一個實例,而ranking_data表存儲了實際提交的數據。排名頁面要求用戶按照喜好排序,頂部是最好的。這個查詢應該計算Collabograde得分,這將是人們對他人看好的數量。
進入應用程序的用戶首先登錄,然後將自己的意見提交給案件,然後將他們的意見與已提交的意見進行排名。每個人都這樣做。例如,可以說我剛剛提交了我的意見並開始排名。有4個意見,包括我自己的系統,還沒有其他排名(儘管通常會有一個意見排名)。如果我將我的意見排在第二位,那麼我的Collabograde得分將是2/4。當用戶2經歷相同的排名過程並將我的觀點排在第一位時,它會變成3/8。
因此對於查詢,訂單爲0爲最好等等。該查詢應該計算一個用戶和一個案例的Collabograde分數。在先前的查詢中檢索用戶在案例中提交的opinion_id。我首先嚐試獲取所有排名中的opinion_id的位置,然後獲取當前所選排名行的排名數據行總數。我使用這些值來計算結果。 因此,我正在計算每個排名行中的一個「分數」,然後將它們平均到一起以創建整個案例的分數。
天才廣泛,我該怎麼辦?
對不起 - 你的SQL格式是討厭我,所以我編輯了 - 希望你不介意 –
添加ORDER BY排名。 ID在裏面選擇將使該查詢返回不同的排名.id – MimiEAM
不是真的。很快我會讀一本專門的MySQL書籍,並學習正確的格式,等等。 – Waffles