SQL を使用したデータの取得について質問があります
私は手に入れたい
count(comments_id) where comment_year = 2012 and
count(comments_id) where comment_year = 2013
1 つのクエリで次のような出力を取得します。
year12_comments | year13_comments
7 | 8
明確であることを願っています。
SQL を使用したデータの取得について質問があります
私は手に入れたい
count(comments_id) where comment_year = 2012 and
count(comments_id) where comment_year = 2013
1 つのクエリで次のような出力を取得します。
year12_comments | year13_comments
7 | 8
明確であることを願っています。
このような
...
SUM(CASE WHEN comment_year = 2012 THEN 1 ELSE 0 END) AS year12_comments,
SUM(CASE WHEN comment_year = 2013 THEN 1 ELSE 0 END) AS year13_comments,
...
アップデート:
それらの間のパーセンテージを取得したい場合は、次のようにサブクエリでそれらを囲むことができます:
SELECT
(year12_comments / year13_comments) * 100
FROM
(
SELECT
...
SUM(CASE WHEN comment_year = 2012 THEN 1 ELSE 0 END) AS year12_comments,
SUM(CASE WHEN comment_year = 2013 THEN 1 ELSE 0 END) AS year13_comments,
...
) sub
year12_comments, year13_comments
パーセンテージと同様に新しい列を作成する場合は、次のSELECT
ようにステートメントに含めるだけです。
SELECT
year12_comments,
year13_comments,
(year12_comments / year13_comments) * 100 AS ThePercenatge
FROM
(
SELECT
...
SUM(CASE WHEN comment_year = 2012 THEN 1 ELSE 0 END) AS year12_comments,
SUM(CASE WHEN comment_year = 2013 THEN 1 ELSE 0 END) AS year13_comments,
...
) sub
COUNT(CASE WHEN comment_year = 2012 THEN 1 END) year12_comments,
COUNT(CASE WHEN comment_year = 2013 THEN 1 END) year13_comments,
MS SQL Server 2005
以上を使用している場合は、使用できますPIVOT
@HamletHakobyanが提案したPIVOT関数を使用できない限り、これは悪い決定です。2013 年に (別の) 世界の終わりが起こらない限り、2014 年もこれを行う必要があります。ユーザーと年についても、単純なグループ化を使用したいと思います。
SELECT user_id, comment_year, count(1)
FROM mytable
GROUP BY user_id, comment_year
確かに、アプリケーションで少しコーディングする必要がありますが、明確さの観点から、これが進むべき道のようです...
(ところで、これも構造よりも速いと思いますCASE WHEN
...)