這是一些TESTDATA數據庫(與Access,MySQL和Oracle兼容):
CREATE TABLE notes (
id int NOT NULL,
note int NOT NULL,
id_prgm int NOT NULL
);
INSERT INTO notes (id, note, id_prgm) VALUES (1, 4, 1);
INSERT INTO notes (id, note, id_prgm) VALUES (3, 16, 1);
INSERT INTO notes (id, note, id_prgm) VALUES (4, 3, 2);
INSERT INTO notes (id, note, id_prgm) VALUES (5, 4, 2);
INSERT INTO notes (id, note, id_prgm) VALUES (6, 5, 2);
ALTER TABLE notes
ADD PRIMARY KEY (id);
CREATE TABLE prgm (
id int NOT NULL,
name varchar(255) NOT NULL
);
INSERT INTO prgm (id, name) VALUES (0, 'program 1');
INSERT INTO prgm (id, name) VALUES (1, 'program 1');
INSERT INTO prgm (id, name) VALUES (2, 'program 2');
ALTER TABLE prgm
ADD PRIMARY KEY (id);
您的疑問:
SELECT p.id, name, AVG(note), COUNT(note)
FROM notes n
JOIN prgm p
ON p.id=n.id_prgm
GROUP BY p.id
回報這些記錄:
id name AVG(note) COUNT(note)
1 program 1 10.0000 2
2 program 2 4.0000 3
如果y OU只希望AVG的MAX和COUNT列中使用此查詢:
select max(avg_note), max(count_note)
from (
SELECT AVG(note) as avg_note, COUNT(note) as count_note
FROM notes n, prgm p
WHERE p.id=n.id_prgm
GROUP BY p.id
) temptable
該查詢是不是也與MySQL,但也與Access和Oracle兼容的,因爲我改變了JOIN ON ..在FROM表1,表2 WHERE。 而我刪除了名稱字段在SELECT中未包含在GROUP BY中。
由於性能/內存原因,我還刪除了SELECT中不必要的字段p.id。
查詢將返回:
max(avg_note) max(count_note)
10.0000 3
重複記錄的問題不是一個在這裏,因爲我只需要論文MAX,沒有其他信息。目標是在我給出的查詢中的公式中使用這些最大值。但是也許我可以做你的第一個查詢,在一個php var中獲取MAX值,並在第二個查詢中使用它來獲得所有prgm的信息?我最好只做一個查詢,但如果沒有更好的方法,我會這樣做。謝謝 – Alabate 2013-04-21 16:29:33