0

我正在尝试从表中提取对于不同字段的每个不同值出现最大次数的值。例如,如果数据集是:

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

非常感谢您的指导!

乔治

4

1 回答 1

0

检查一下...为了避免引用同一组结果,我创建了一个表...您应该在处理后将其删除,或者将 maxcounttemp 替换为(SELECT what, loc, count(loc) howmany FROM maxcount GROUP BY what, loc) as tblX我尝试将其设为 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 在此查询中同样可能...

于 2012-04-13T00:20:28.833 回答