我正在尝试从表中提取出现不同字段的每个不同值的最大次数的值。例如,如果数据集是:
a x
a x
a y
b x
b y
c x
c y
c y
查询将产生
a x 2
b x 1
c y 2
我的实验使用以下内容:
CREATE TABLE IF NOT EXISTS `maxcount` (
`what` varchar(1) DEFAULT NULL,
`loc` varchar(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
和
INSERT INTO `maxcount` (`what`, `loc`) VALUES
('a', 'x'),
('a', 'x'),
('a', 'y'),
('b', 'x'),
('b', 'y'),
('c', 'x'),
('c', 'y'),
('c', 'y');
第一部分很简单:
select what, loc, count(loc) howmany from maxcount group by what, loc;
我还没想到的是如何使用它来为每个“what”获取一行,显示具有最大数量和最大值的loc值。
解决方案不是:
select what, loc, max(howmany) from (
select what, loc, count(loc) howmany from maxcount group by what, loc)
A group by what;
因为它产生:
a x 2
b x 1
c x 2
感谢您的指导!
乔治
答案 0 :(得分:0)
检查出来...为了避免引用同一组结果,我创建了一个表...你应该在处理后删除它,或者用(SELECT what, loc, count(loc) howmany FROM maxcount GROUP BY what, loc) as tblX
替换maxcounttemp我试图使它成功TEMPORARY,但如果外表是相同的,则不能在子查询中使用它。
CREATE TABLE `maxcounttemp` (
`what` varchar(1) DEFAULT NULL,
`loc` varchar(1) DEFAULT NULL,
`howmany` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO maxcounttemp (
SELECT what, loc, count(loc) howmany FROM maxcount GROUP BY what, loc
);
SELECT mct.what, mct.loc, mct.howmany
FROM maxcounttemp mct
WHERE (mct.what, mct.howmany) IN (
SELECT mct2.what, MAX(mct2.howmany)
FROM maxcounttemp mct2
WHERE mct2.what = mct.what
GROUP BY mct2.what
) GROUP BY (mct.what);
希望它有所帮助......请记住,bx或by在此查询中同样可能...