如何从2表查询的结果中找到名称流行度的差异?

时间:2013-03-26 08:35:58

标签: sql mysqli

假设我有两张桌子:

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年增加。如何创建一个能够显示名称受欢迎程度增加的查询?

1 个答案:

答案 0 :(得分: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 demo: