这是包含一些测试数据的数据库(与 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
如果您只想要 AVG 和 COUNT 列的 MAX,请使用此查询:
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 兼容,因为我在 FROM table1、table2 WHERE 中更改了 JOIN ON .. 并且我删除了 SELECT 中未包含在 GROUP BY 中的name字段。
由于性能/内存原因,我还删除了 SELECT 中不必要的字段p.id 。
查询将返回:
max(avg_note) max(count_note)
10.0000 3