【发布时间】:2017-03-28 14:24:01
【问题描述】:
我有如下描述的三个表:
Area (Id, Description)
City(Id, Name)
Problem(Id, City, Area, Definition):
City references City (Id), Area references Area (Id)
我想为每个城市(名称)找出问题中出现频率最高的区域(描述)值。
例子:
Area
Id Description
1 Support
2 Finance
City
Id Name
1 Chicago
2 Boston
Problem
Id City Area Definition
1 1 2 A
2 1 2 B
3 1 1 C
4 2 1 D
期望的输出:
Name Description
Chicago Finance
Boston Support
这是我尝试过但没有成功的方法:
SELECT Name,
Description
FROM
(SELECT *
FROM Problem AS P,
City AS C,
Area AS A
WHERE C.Id = P.City
AND A.Id = P.Area ) AS T1
WHERE Description =
(SELECT Description
FROM
(SELECT *
FROM Problem AS P,
City AS C,
Area AS A
WHERE C.Id = P.City
AND A.Id = P.Area ) AS T2
WHERE T1.Name = T2.Name
GROUP BY Description
ORDER BY Count(Name) DESC LIMIT 1 )
GROUP BY Name,
Description
谢谢!
【问题讨论】:
-
请发布一些示例输入和所需的输出...
-
没有任何时间戳字段的最近区域的标准是什么?
-
这实际上是每个城市的问题中出现频率最高的区域值。和这个问题类似:stackoverflow.com/questions/12235595/… 但是使用了三个表
-
听起来像是每组前 N 个问题。已经有大量的解决方案。
-
我想在这里看到一些模拟数据和预期结果。我看到它的方式你想在结果中看到 city.name 和 area.description 但我不确定还有什么。 “最常见的面积值”这句话对我来说毫无意义。如果将城市和区域作为内部连接加入问题并计算 id,我们将获得每个区域和城市的计数。但由于它是聚合的,因此没有“最频繁”。