0

2つのテーブルがあるとしましょう:

table1 and table2

Table1 には次の値があります。

id(key), last_name(char)

表 2 には次の値があります。

id(key), year_born(char)

これらの 2 つのテーブルを次のように結合できます。

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 年の結果を返す 1 つのサブクエリと、2010 年の結果を返す別のサブクエリを作成できます。その後、2 つのサブクエリを結合して結果を比較します。

例:

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 に答える