Я пытаюсь извлечь из таблицы значение, отображающее максимальное количество раз для каждого отдельного значения другого поля. Например, если набор данных был:mysql, значение которого имеет максимальное количество
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;
То, что я еще не понял, заключается в том, как использовать это, чтобы получить одну строку для каждого «что», показывающее значение 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
Ваше руководство с благодарностью принял!
Джордж
Это обеспечивает решение: 'выбрать то, что, LOC, макс (howmany) большинство из ( выберите, что, loc, count (loc) howmany из группы maxcount тем, что, loc order by count (loc) desc) Группа, которой: ' – geoB
Вы по-прежнему выбираете' loc' в своей внешней группе, агрегировано или в группе, поэтому не гарантируется возврат правильного результата. Это может работать нормально для упрощенной схемы, но вы столкнулись с проблемами с большой таблицей. – piotrm
Спасибо. Я догадался, что мое решение не будет работать в моей реальной проблеме. – geoB