2015-10-30 49 views
1

好的,所以我的要求相當簡單。我有這樣的桌子。MySQL:獲取多列整數值的數量和總和

images  |  videos  |  reviews 
-------------------------------------------------- 
0   |  2   |  1 
4   |  5   |  0 
11   |  1   |  4 
0   |  1   |  7 

我需要編寫計算在不等於0,並且還給出了數列中的實際和每一列的行的查詢。所以結果會看起來像這樣。

Columns  |  Counts  |  Sum 
---------------------------------------------------- 
images   |  2   |  15 
videos   |  4   |  9 
reviews  |  3   |  13 

這是SQL可以直接使用嗎?我不想在應用程序級別上進行總結。到目前爲止,我已經寫了這個查詢,它工作正常,只是沒有總和部分。

SELECT 'images', SUM(images != 0) 
FROM dpsreport where publisherId = 91 
UNION 
SELECT 'videos', SUM(videos != 0) 
FROM dpsreport where publisherId = 91 
UNION 
SELECT 'reviews', SUM(reviews != 0) 
FROM dpsreport where publisherId = 91; 

注意SUM查詢給我的行數,而不是實際的總和,如數學加法。

回答

1

我想這你想要做什麼:

SELECT 'images' as `columns`, SUM(images <> 0) as counts, SUM(images) as `sum` 
FROM dpsreport where publisherId = 91 
UNION ALL 
SELECT 'videos', SUM(videos <> 0), SUM(videos) 
FROM dpsreport where publisherId = 91 
UNION ALL 
SELECT 'reviews', SUM(reviews <> 0), SUM(reviews) 
FROM dpsreport where publisherId = 91; 

注:

  • SQL標準不等於爲<>,而不是!=(雖然很多數據庫支持)。
  • 使用UNION ALL而不是UNION,以避免刪除重複項(在此情況下可忽略)的開銷。