группировка mysql по запросу с фильтром столбцов

#mysql #sql

#mysql #sql

Вопрос:

У меня есть таблица mysql, содержащая данные, упомянутые ниже, со столбцами C1, C2 и C3. Данные таблицы указаны ниже (фиктивные данные, поскольку конфиденциальны). Я хочу запрос mysql, который вернет количество всех столбцов C1 в порядке убывания c1 (чтобы сначала получить максимальное количество C1), который имеет максимальное количество данных desc и C2 C1, повторяющихся максимальное время, и то же самое с C3.

     C1  C2  C3
    X   A   U
    X   A   U
    X   B   V
    Y   H   K
    Y   H   K
    Y   H   K
    Z   F   R
    Z   F   P
    Z   G   P
    Z   F   R
  

Выходные данные должны быть в формате ниже.

   Count  C1   C2  C3
  4      Z    F   P
  3      Y    H   K
  3      X    A   U
  

Я могу получить количество, но не максимальное повторяющееся значение C2, C3 в том же запросе.

Ответ №1:

Вы можете попробовать использовать select подзапрос, чтобы сделать это.

Запрос 1:

 SELECT 
       COUNT(*),
       C1,
       (SELECT tt.C2 FROM T tt WHERE t1.C1 = tt.C1 GROUP BY tt.C2 ORDER BY COUNT(*) DESC,tt.C2 LIMIT 1) c2,
       (SELECT tt.C3 FROM T tt WHERE t1.C1 = tt.C1 GROUP BY tt.C3 ORDER BY COUNT(*) DESC,tt.C3 LIMIT 1) c3
FROM T t1
GROUP BY C1 
ORDER BY COUNT(*) desc,C1 desc
  

Результаты:

 | COUNT(*) | C1 | c2 | c3 |
|----------|----|----|----|
|        4 |  Z |  F |  P |
|        3 |  Y |  H |  K |
|        3 |  X |  A |  U |
  

Комментарии:

1. Этот запрос работает отлично, но время выполнения больше. Можем ли мы изменить запрос или использовать объединения, чтобы получить C2 и C3. Основная идея заключается в сокращении времени выполнения запроса.