Подсчитайте повторяющееся значение из столбца для каждой строки с одинаковым значением в mysql - PullRequest
0 голосов
/ 13 июля 2020
+------+-------+
| name | value |
+======+=======+
| 5    | 0     |
+------+-------+
| 4    | 0     |
+------+-------+
| 3    | 1     |
+------+-------+
| 4    | 1     |
+------+-------+
| 4    | 1     |
+------+-------+
| 5    | 0     |
+------+-------+            

Я хочу получить наиболее повторяющееся значение для каждого имени в части.
имя 5 имеет наиболее повторяющееся значение 0
имя 4 имеет наиболее повторяющееся значение 1
имя 3 имеет наибольшее количество повторяющееся значение 1
Как я могу сделать это в одном запросе к mysql?
Спасибо

SOLVED

С помощью оператора select из @nvidot и других сообщений из Итак, я обнаружил, что это обычная проблема с таким типом запросов. Более новые версии MySQL поставляются с включенным ONLY_FULL_GROUP_BY по умолчанию, и многие из решений здесь не пройдут тестирование с этим условием.

Итак, рабочая формула для меня была:

SELECT DISTINCT t1.name, MAX(t1.occ), MAX(t2.value)
FROM (select name, value, count(*) as occ from `table` group by name, value order by occ desc) AS t1
JOIN (select name, adstatus, count(*) as occ from `table` group by name, value order by occ desc) AS t2 ON t2.name = t1.name AND t2.occ = (
    SELECT MAX(occ) FROM (select name, value, count(*) as occ from `table` group by name, value order by occ desc) t3 WHERE t3.name = t1.name
)
GROUP BY t1.name;

Ответы [ 3 ]

0 голосов
/ 13 июля 2020
SELECT       `column`,
             COUNT(`column`) AS `value_occurrence` 
    FROM     `my_table`
    GROUP BY `column`
    ORDER BY `value_occurrence` DESC

Также посетите эту ссылку , чтобы получить более подробную информацию.

0 голосов
/ 13 июля 2020
select name, val
from (select name, val, max(occ)
      from (select name, val, count(*) as occ
            from `sample` group by name, val
            order by occ desc) as groups
      group by name) as maximums;

Наружный select служит для обозначения c только для отображения name и val order by occ desc служит для получения правильного val

Может быть достаточно следующего:

select name, val
from (select name, val, count(*) as occ
      from `sample`
      group by name, val
      order by occ desc) as groups
group by name;

[edit]: Следующее сообщение не должно вызывать ошибку, поскольку оно не использует неагрегированный столбец и не полагается на order by. Несколько name строк могут существовать, если существует несколько максимумов для name/val count.

select name,val
      from (select name as maxname, max(occ) as maxocc
            from (select name, val, count(*) as occ
                  from `sample`
                  group by name, val) as counts2
            group by name) as maxs
      join (select name, val, count(*) as numocc
            from `sample`
            group by name, val) as counts1
      on name = maxname AND numocc = maxocc;
0 голосов
/ 13 июля 2020

В PL / Sql Oracle есть специальная c функция, которая может удовлетворить ваш запрос, которая называется Оконная функция , но в MySql такой вещи нет untile mysql -8.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...