Это ваша база данных с некоторыми 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 НУ хочу только Мах AVG и 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 table1, table2 WHERE. . И я удалил поле в SELECT, которое не было включено в GROUP BY.
Я также удалил ненужное поле p.id в SELECT по причине работоспособность/память причины.
запрос возвратит:
max(avg_note) max(count_note)
10.0000 3
дубликат проблема записи не один здесь, потому что я просто нужно тезисы MAX, а не другая информация. Цель состоит в том, чтобы использовать тезисы max в формуле в запросе, который я даю. Но, возможно, я могу сделать свой первый запрос, получить значения MAX в php var и использовать его во втором запросе, чтобы получить всю информацию prgm? Я предпочитаю делать только один запрос, но если нет лучшего способа, я сделаю это.Спасибо – Alabate