表结构如下,
我的第一个SQL查询如下,
SELECT DISTINCT(IndustryVertical)
, COUNT(IndustryVertical) AS IndustryVerticalCount
, City
FROM `records`
WHERE City!=''
GROUP
BY IndustryVertical
, City
ORDER
BY `IndustryVerticalCount` DESC
通过运行以上查询,我得到了以下内容,
我要实现的目标是获得所有DISTINCT CITY的列表,且仅包含一个MAX(IndustryVerticalCount)和IndustryVertical。
尝试了几件事,没有希望。
任何人,请引导我。
每个城市值中都有几条记录。我想要实现的是得到,
以上记录仅供参考。在这里,您只能看到不同的城市值,只有一个垂直名称具有最大数量。
答案 0 :(得分:0)
由于您使用分组依据,因此它将仅自动选择不同的行。由于您在两列上使用分组依据,因此您将获得其中只有两列组合是唯一的行。
您现在要做的是使用此结果表,并对其进行查询以找到按城市分组的最大计数。
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)
这可能不是最有效的方法,但我认为它会起作用。
答案 1 :(得分:0)
这个怎么样?我认为应该起作用:
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
答案 2 :(得分:0)
我认为您只是想要一个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;