2011-04-07 88 views
1

的輸出我有此表在我的數據庫:PHP/MySQL的問題查詢

classes 

id | classname | 


grades 

id | class_id | grade | date 

我需要獲得評分的平均值,並根據日期+正確的類名的最新等級。

我有這個疑問,但這不輸出正確類名...

SELECT 
       AVG(grade), 
       classes.classname, 
       grades.grade, 
       MIN(ABS(DATEDIFF(CURDATE(),'date'))) 
       FROM 
       grades, classes 

       GROUP BY 
       grades.grade_id 

       ORDER BY grades.date DESC 
+0

你能澄清這個問題有點多? – SimonDowdles 2011-04-07 14:16:30

+0

我需要得到像英文|的輸出8.0(平均)| 7.5(最新) – DaDu 2011-04-07 14:18:59

+0

呃,什麼是cijfers?你沒有選擇這個名字的表... – schizodactyl 2011-04-07 14:18:59

回答

1

你的問題似乎有點大,所以我回答我的解釋你的問題。

你沒有證明你得到了什麼,但是,我要去猜你有成績的名單,平均按類,而不是類的有級..

所以,雖然我覺得在那裏孤單幾個問題。第一。

select avg(grade), classname from classes 
left join grade on classes.id = grades.class_id 
group by classname 

應該給你平均分等級。

ciefers是什麼?你並沒有真正包含太多的內容,但是你也讓它以某種方式平均。

+0

「cijfers」是荷蘭語成績單詞。 :)你的解決方案應該是正確的;問題在於團隊無法工作。 – 2011-04-07 14:25:08

+0

正確,我無法用英語解釋我的問題。對不起,那。 – DaDu 2011-04-07 14:26:21

0

首先,AVG(cijfer)實際上是引用什麼。您需要將AVG()分配給這樣的變量:

AVG(grade) AS avgrade 

或許你可以嘗試這樣的查詢:

SELECT AVG(grade) as average FROM grades, class_id AS cid, (SELECT classname FROM classes WHERE id=cid) AS cname FROM grades ORDER BY date DESC GROUP BY cname; 

怎麼樣了這項工作呢?

+0

更新了答案,因爲我忘記了將類名稱指定給變量 – SimonDowdles 2011-04-07 14:22:35

0

雖然我很討厭做他們的人的功課,這似乎爲我工作:

 
select a.classname, AVG(b.grade) AS "Avg Grade", 
     c.grade as "Most Recent Grade", c.grade_date as "Most Recent Grade Date" 
from classes a, grades b, grades c 
where a.id = b.class_id 
AND c.class_id = a.id 
AND NOT EXISTS 
    (SELECT d.grade_date FROM grades d 
    WHERE d.class_id = c.class_id 
    AND d.grade_date > c.grade_date) 
group by a.classname, c.grade, c.grade_date;