Как получить наиболее часто встречающееся значение столбца для определенного идентификатора в таблице - PullRequest
0 голосов
/ 02 июня 2019

Я пытаюсь получить наиболее частое значение из таблицы базы данных SQLite 3 для каждого конкретного ID (который является ID компании).Я пробовал с GROUP BY и ORDER BY, а также с COUNT() функцией.

SELECT company_id, max(car) 
FROM car_orders 
GROUP by company_id
ORDER by max(car)

Для определенного company_id (9) Я ожидаю, что «Audi» будетв результате, но это не так, как его «Фольксваген» (что не так)

Ответы [ 2 ]

1 голос
/ 02 июня 2019

Подобно вашим попыткам, рассмотрите возможность объединения двух агрегатов, которые рассчитывают COUNT на автомобиль и компанию и MAX одного счетчика на компанию. Ниже используется CTE , представленный в SQLite в версии 3.8.3, выпущенной в Февраль 2014 .

WITH cnt AS ( 
   SELECT company_id, car, COUNT(*) AS car_count
   FROM car_orders 
   GROUP by company_id, car
),
 max_cnt AS (
   SELECT cnt.company_id, MAX(cnt.car_count) as max_count
   FROM cnt
   GROUP BY cnt.company_id
)

SELECT cnt.company_id, cnt.car
FROM cnt
INNER JOIN max_cnt
  ON cnt.company_id = max_cnt.company_id
  AND cnt.car_count = max_cnt.max_count
1 голос
/ 02 июня 2019

В более поздних версиях SQLite вы можете использовать оконные функции:

SELECT cc.*
FROM (SELECT company_id, car, COUNT(*) as cnt,
             ROW_NUMBER() OVER (PARTITION BY company_id ORDER BY COUNT(*) DESC) as seqnum
      FROM car_orders
      GROUP by company_id, car
     ) cc
WHERE seqnum = 1;

В более ранних версиях это немного сложнее:

WITH cc as (
      SELECT company_id, car, COUNT(*) as cnt
      FROM car_orders
      GROUP by company_id, car
     )
SELECT cc.*
FROM cc
WHERE cc.cnt = (SELECT MAX(cc2.cnt)
                FROM cc cc2
                WHERE cc2.company_id = cc.company_id
               );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...