【问题标题】:Find the city which a name most repeated找出一个名字重复次数最多的城市
【发布时间】:2021-09-08 22:02:06
【问题描述】:

我有两张桌子:

table_1: id, name (DEFAULT 'JACK')

table_2:id,城市

我将它们与“id”链接并在其中插入一些数据,例如:

INSERT INTO table_1 VALUES(1, DEFAULT);
INSERT INTO table_1 VALUES(2, DEFAULT);
INSERT INTO table_1 VALUES(3, DEFAULT);
INSERT INTO table_1 VALUES(4, DEFAULT);


INSERT INTO table_2 VALUES(1, 'Paris');
INSERT INTO table_2 VALUES(2, 'Paris');
INSERT INTO table_2 VALUES(3, 'Paris');
INSERT INTO table_2 VALUES(4, 'Berlin');

我在上面的 Paris 中添加了 3 个 JACK,我需要以某种方式遍历它以获取其中包含最多 JACK 名称的城市。我该怎么做?

【问题讨论】:

  • 你在用什么rdbms? MySQL 还是 PostgreSQL?
  • @Mureinik 抱歉,我添加了 PostgreSQL。

标签: sql postgresql select


【解决方案1】:

您可以使用rank 按千斤顶数量对城市进行排名,然后获得第一名:

SELECT city
FROM   (SELECT city, RANK() OVER (ORDER BY cnt DESC) AS rk
        FROM   (SELECT   city, COUNT(*) AS cnt
                FROM     t1
                JOIN     t2 ON t1.id = t2.id
                WHERE    name = 'Jack'
                GROUP BY city
               ) x
       ) y
WHERE  rk = 1

【讨论】:

  • 非常感谢先生!效果很好!
  • 先生,您能解释一下最内在的 SELECT 做什么吗?
  • @newbienUser 内部选择计算每个城市的插孔数量。中间的根据千斤顶的数量为这些城市分配排名,外面的选择排名最高的城市或城市
【解决方案2】:
SELECT t1.id, t1.name, t2.city, COUNT(t1.name) FROM table_1 t1
JOIN table_2 t2 ON t1.id = t2.id
GROUP BY t2.city, t1.name;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多