Нужен список данных с использованием DISTINCT, COUNT, MAX - PullRequest
0 голосов
/ 03 октября 2018

Структура таблицы следующая:

enter image description here

Мой первый SQL-запрос такой, как показано ниже,

SELECT DISTINCT(IndustryVertical)
     , COUNT(IndustryVertical) AS IndustryVerticalCount
     , City 
  FROM `records` 
 WHERE City!='' 
 GROUP 
    BY IndustryVertical
     , City 
 ORDER 
    BY `IndustryVerticalCount` DESC

при запускеПриведенный выше запрос я получаю ниже,

enter image description here

То, чего я пытаюсь добиться, - это получить список всех РАЗЛИЧНЫХ ГОРОДОВ ТОЛЬКОONE MAX (IndustryVerticalCount) и IndustryVertical.

Пробовал несколько вещей без надежды.

Кто-нибудь, пожалуйста, помогите мне.

В каждом значении каждого города есть несколько записей.я пытаюсь добиться того, чтобы получить,

  1. Все различные городские значения
  2. МАКСИМАЛЬНЫЙ СЧЕТ промышленностиVertical
  3. Название отраслиVertical

Запись, которую я получаю, выглядит следующим образом: enter image description here

Что я пытаюсь получить, enter image description here

Приведенная выше запись является справочной целью.Здесь вы можете видеть только отдельные значения городов, только с одним вертикальным названием, имеющим максимальное количество.

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Как насчет этого?Я думаю, что это должно работать:

DECLARE @DataSet TABLE (
    City VARCHAR(50),
    IndustryVertical VARCHAR(50),
    IndustryVerticalCount INT
)

INSERT INTO @DataSet SELECT 'Bangalore', 'Consumer Internet', 279
INSERT INTO @DataSet SELECT 'Bangalore', 'Technology', 269
INSERT INTO @DataSet SELECT 'Bangalore', 'Logistics', 179
INSERT INTO @DataSet SELECT 'Mumbai', 'Technology', 194
INSERT INTO @DataSet SELECT 'Mumbai', 'Consumer Internet', 89


SELECT 
    table_a.* 
FROM @DataSet table_a
LEFT JOIN @DataSet table_b 
    ON table_a.City = table_b.City
    AND table_a.IndustryVerticalCount < table_b.IndustryVerticalCount
WHERE table_b.IndustryVerticalCount IS NULL
0 голосов
/ 03 октября 2018

Я думаю, вы просто хотите HAVING предложение:

SELECT r.IndustryVertical,
       COUNT(*) AS IndustryVerticalCount,
       r.City 
FROM records r
WHERE r.City <> ''
GROUP BY r.IndustryVertical, r.City 
HAVING COUNT(*) = (SELECT COUNT(*)
                   FROM records r2
                   WHERE r2.City = r.City
                   ORDER BY COUNT(*) DESC
                   LIMIT 1
                  )
ORDER BY IndustryVerticalCount DESC;
0 голосов
/ 03 октября 2018

Поскольку вы используете group by, он будет автоматически выбирать только отдельные строки.Поскольку вы используете группирование по двум столбцам, вы получите строки, в которых различна только комбинация обоих столбцов.

Теперь вам нужно использовать эту результирующую таблицу и выполнить для нее запрос, чтобы найтимаксимальное количество сгруппированных по городам.

    SELECT IndustryVertical, IndustryVerticalCount, City from 
   ( SELECT IndustryVertical
     , COUNT(IndustryVertical) AS IndustryVerticalCount
     , City 
  FROM `records` 
 WHERE City!='' 
 GROUP 
    BY IndustryVertical
     , City) as tbl where IndustryVerticalCount IN (Select max(IndustryVerticalCount) from ( SELECT IndustryVertical
     , COUNT(IndustryVertical) AS IndustryVerticalCount
     , City 
  FROM `records` 
 WHERE City!='' 
 GROUP 
    BY IndustryVertical
     , City) as tbl2 where tbl.City=tbl2.city)

Возможно, это не самый эффективный метод, но я думаю, что он будет работать.

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