0

假设我有 2 张桌子:

table1 and table2

表 1 具有值:

id(key), last_name(char)

表 2 的值:

id(key), year_born(char)

我可以将这两张桌子加入:

SELECT last_name, year_born
FROM table1 INNER JOIN table2
  ON table1.id = table2.id;

我如何找到相隔 10 年的 2 年中哪些名字最受欢迎?假设 table1 和 table2 每个都有数千个条目。

我试过了:

SELECT last_name, name_year, COUNT(last_name) AS num
FROM table1 INNER JOIN table2
  ON table1.id = table2.id
GROUP BY last_name, name_year
ORDER BY num DESC;

例如,我想查看从 2000 年到 2010 年最流行的名称增加。如何创建一个查询以显示名称的流行度增加?

4

1 回答 1

0

您可以创建一个返回 2000 年结果的子查询,以及另一个返回 2010 年结果的子查询。然后只需加入两个子查询并比较结果

例子:

SELECT  y2010.last_name,
        COALESCE(y2000.cnt, 0)  y2000 ,
        COALESCE(y2010.cnt, 0)  y2010 ,
        COALESCE(y2010.cnt, 0) - COALESCE(y2000.cnt, 0) changes
FROM    ( SELECT    last_name ,
                    COUNT(*) cnt
          FROM      table1
                    INNER JOIN table2 ON table1.id = table2.id
          WHERE     year_born = 2000
          GROUP BY  last_name
        ) as y2000
RIGHT JOIN 
        ( SELECT  last_name ,
                COUNT(*)  cnt
        FROM    table1
                INNER JOIN table2 ON table1.id = table2.id
        WHERE   year_born = 2010
        GROUP BY last_name
        ) as y2010 
ON y2000.last_name = y2010.last_name

SQLFiddle 演示:

于 2013-03-26T09:31:47.083 回答