繁体   English   中英

需要使用DISTINCT,COUNT,MAX的数据列表

[英]Need list of data using DISTINCT, COUNT, MAX

表结构如下

在此处输入图片说明

我的第一个SQL查询如下

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

通过运行以上查询,我得到了以下内容,

在此处输入图片说明

我要实现的目标是获得仅拥有一个MAX(IndustryVerticalCount)和IndustryVertical的所有DISTINCT CITY的列表。

毫无希望地尝试了几件事。

任何人,请引导我。

每个城市值中都有几条记录。 我想要达到的是

  1. 所有独特的城市价值
  2. 最大行业数垂直
  3. 行业名称垂直

我得到的记录如下, 在此处输入图片说明

我想要得到的 在此处输入图片说明

以上记录仅供参考。 在这里,您只能看到不同的城市值,只有一个垂直名称具有最大数量。

由于您使用分组依据,它将自动选择仅不同的行。 由于您在两列上使用分组依据,因此您将获得其中只有两列组合是不同的行。

现在,您需要使用此结果表,并对它执行查询以找到按城市分组的最大计数。

    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)

这可能不是最有效的方法,但我认为它会起作用。

这个怎么样? 我认为应该这样做:

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

我认为您只需要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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM