2

SQL を使用したデータの取得について質問があります

私は手に入れたい

count(comments_id) where comment_year = 2012 and 
count(comments_id) where comment_year = 2013 

1 つのクエリで次のような出力を取得します。

year12_comments  |  year13_comments
7                |  8         

明確であることを願っています。

4

3 に答える 3

4

このような

...
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

Update2

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
于 2013-01-10T11:20:23.760 に答える
0
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

于 2013-01-10T11:22:20.990 に答える
0

@HamletHakobyanが提案したPIVOT関数を使用できない限り、これは悪い決定です。2013 年に (別の) 世界の終わりが起こらない限り、2014 年もこれを行う必要があります。ユーザーと年についても、単純なグループ化を使用したいと思います。

SELECT user_id, comment_year, count(1)
FROM mytable
GROUP BY user_id, comment_year

確かに、アプリケーションで少しコーディングする必要がありますが、明確さの観点から、これが進むべき道のようです...

(ところで、これも構造よりも速いと思いますCASE WHEN...)

于 2013-01-10T11:30:19.307 に答える