Это моя база данных (я ставлю только важные COLS)Как извлечь запрос из трех таблиц
КАТЕГОРИИ (чид, CNAME)
RECORD КАТЕГОРИИ
(1, A)
(2, B)
(3, C)
ПОЛЬЗОВАТЕЛИ (uid, uname, cid);
ЗАПИСИ ПОЛЬЗОВАТЕЛЕЙ
(1, JON, 1)
(2, NED, 1)
(3, ROB, 2)
(4, JAM, 3)
(5, TYR, 1)
(6, CAT, 2)
(7, JOF, 2)
(8, SAN, 3)
(9, ARY, 1)
ЗАКУПКИ (ИДП, UID, цена)
RECORD ЗАКУПКИ
(1, 2, 100)
(2, 5, 150)
(3, 1, 300)
(4, 2, 120)
(5, 3, 50)
(6, 3, 210)
(7, 2, 190)
(8, 8, 155)
(9, 9, 111)
(10, 2, 100)
(11, 2, 150)
(12, 1, 310)
(13, 8, 120)
(14, 3, 50)
(15, 7, 210)
(16, 2, 190)
(17, 6, 155)
(18, 4, 111)
Я хочу, чтобы финальный стол:
FINAL TABLE (cname, total)
всего: сумма не более 3 значений группы tnum по SECOND.sid.
Это 3 максимальных значения для каждой SECOND строки, которую вы можете получить с помощью команды SELECT FROM table THIRD.
1 -> MAX(300, 310) = 310
2 -> MAX(100, 120, 190, 100, 150, 190) = 190
3 -> MAX(210, 50, 50) = 210
4 -> MAX(111) = 111
5 -> MAX(150) = 150
6 -> MAX(155) = 155
7 -> MAX(210) = 210
8 -> MAX(155, 120) = 155
9 -> MAX(111) = 111
Категория А у пользователя 1, 2, 5 и 9 таким образом, только максимум три макс будет сумма
total1(310) > total2(190) > total5(150) > total9(111).
Так
A -> total1(310) + total2(190) + total5(150) = 650
Категория B Пользователя 3, 6 и 7, поэтому все эти три являются правильными:
B -> total3(210) + total6(155) + total7(210) = 575
Наконец категории C есть пользователь 4 и 8
C-> total4(111) + total8(155) = 266**
Так что я сделал это подзапрос:
SELECT max(price) tot, u.uid user, p.pid purchase, u.cid category
FROM purchase p, user u
WHERE p.uid=u.uid group by user ORDER BY tot DESC LIMIT 3
Limit 3 не работает, потому что печать первых трех значений.
Это общий запрос:
SELECT c.cname, sum(totalmax.tot) totalsum
FROM purchases p1, categories c1, users u1,
(SELECT max(price) tot, u.uid user, p.pid purchase, u.cid category
FROM purchase p, user u
WHERE p.uid=u.uid group by user ORDER BY tot DESC LIMIT 3) totalmax
WHERE totalmax.pid = p1.pid AND u1.cid=c1.cid AND u1.uid=p1.uid
GROUP BY c1.cnome
ORDER BY totalsum DESC
Я пытался сделать это (то есть думать, что я хочу):
AND u.cid = c1.cid
Но подзапрос не читал f1.fid. Как я могу дать c1.cid для подзапроса?
Спасибо за ответ
Вы действительно используете MySQL и SQL Server здесь? Я задерживаю некоторый SQL, специфичный для продукта, который не будет работать на обоих продуктах ... – jarlh
Нет sqlserver. Я сделал ошибку с тегами –