以下是我正在使用的表格:
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。
因此PID 1匹配2个WID(5,7),其总和值为16(7 + 9)。 并且PID 2仅匹配1个WID(5),其总和VALUE为2。 PID 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 :(得分: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