簡體   English   中英

SQL將結果分為2列

[英]SQL divide results into 2 columns

我有一個關於使用SQL檢索數據的問題

我想得到

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

在一個查詢中獲得如下輸出:

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

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

除非您可以使用PIVOT函數@HamletHakobyan建議,否則恕我直言,這是一個錯誤的決定。 除非世界另一端發生在2013年,否則您也必須在2014年這樣做。 我也希望為用戶和年份使用一個簡單的分組依據:

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

當然,您必須在應用程序中編寫一些代碼,但是從清晰度的角度來看,這似乎是可行的方法...

(順便說一句,我認為這也比CASE WHEN結構還要快...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM