2012-03-04 2 views
0

Вот таблица, в которой я работаю:MySQL запросов - группировка по комбинированным идентификаторами

CREATE TABLE `index` (
`wid` int(7) unsigned NOT NULL, 
`pid` int(7) unsigned NOT NULL, 
`value` tinyint(3) unsigned NOT NULL DEFAULT '0', 
UNIQUE KEY `wid` (`wid`,`pid`), 
KEY `pid` (`pid`), 
KEY `value` (`value`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

У меня есть целые значения «PID» соответствие различных «WID», которые только уникальны вместе.

Например, у меня есть:

pid - wid - value 
1 - 5 - 7 
1 - 6 - 5 
1 - 7 - 9 
2 - 5 - 2 
2 - 8 - 4 
3 - 8 - 8 
3 - 7 - 12 
4 - 5 - 5 
.. - .. - .. 

Теперь давайте предположим, что я хочу, чтобы получить PID, где WID соответствует 5 и 7 порядка самой высокой суммой VALUE.

So PID 1 соответствует 2 WID (5,7), сумма которых VALUE равна 16 (7 + 9). и ПИД-2 соответствует только 1 УЖР (5), сумма которых значение равно 2. и ПИД-3 соответствует WID (7), сумма которых значение равно 12.

мне нужно построить запрос, который делает это, и виды с помощью SUM VALUE по убыванию.

Такие, как:

SELECT 
    index.pid, SUM(index.value) TotalSum 
FROM index 
WHERE 
    index.wid = 5 or index.wid = 7 
GROUP BY UNIQUE(index.pid) 
ORDER BY TotalSum DESC 

Я знаю, что этот запрос неверен, но я пытаюсь показать, что я пытаюсь сделать.

ответ

0

То, что вы пытаетесь выполнить, примерно соответствует.

Попробуйте ниже:

SELECT index.pid, SUM(index.value) TotalSum 
FROM index 
WHERE (wid = 5 or wid = 7) //if you want only from wid 5,7 elase no need for it 
GROUP BY index.pid 
ORDER BY TotalSum DESC 
+0

о я предполагаю, что операция SUM действительно существует лол. спасибо, что заставило меня решить это! – nick

Смежные вопросы