[英]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的列表。
毫无希望地尝试了几件事。
任何人,请引导我。
每个城市值中都有几条记录。 我想要达到的是
以上记录仅供参考。 在这里,您只能看到不同的城市值,只有一个垂直名称具有最大数量。
由于您使用分组依据,它将自动选择仅不同的行。 由于您在两列上使用分组依据,因此您将获得其中只有两列组合是不同的行。
现在,您需要使用此结果表,并对它执行查询以找到按城市分组的最大计数。
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.