2014-01-25 103 views
1

我有一个类似下面的查询。我的目标是添加所有'total_points'并检索所有行的总和的单个结果。获取所有行的总和

SELECT 
SUM(
COALESCE(
CASE 
WHEN COUNT(DISTINCT `table_1`.views) > 50 OR COUNT(DISTINCT `table_1`.views) = 50 AND COUNT(DISTINCT `table_1`.views) < 100 THEN COUNT(DISTINCT `table_1`.views) +5 
ELSE COUNT(DISTINCT `table_1`.views) 
END,0) 
+ 

CASE 
WHEN COUNT(DISTINCT `table_2`.views) > 50 OR COUNT(DISTINCT `table_2`.views) = 50 AND COUNT(DISTINCT `table_2`.views) < 100 THEN COUNT(DISTINCT `table_2`.views) +5 
ELSE COUNT(DISTINCT `table_2`.views) 
END,0)) AS sum 

FROM `table_1` 
LEFT JOIN `table_2` 
ON `table_1`.id = `table_2`.id 
GROUP BY `table_1`.primary_id 

这会给我这样的事情

rank | total_points 
1   321 
2   111 
3   100 
4   90   
5   72 
6   60 
7   45 
8   23 
9   11 
10   5 

结果这是我的愿望的结果:

sum | 
    838 
+0

我试着但没有工作。 – user3135626

+0

它给我一个错误“无效的使用组功能” – user3135626

+0

SELECT SUM(Totalpoints)FROM(my query)x; – Strawberry

回答

0

试试这个:

SELECT IFNULL(rank, 'Sum') rank, total_points 
FROM (SELECT @rank := @rank + 1 AS rank, T1.total_points 
     FROM (SELECT COALESCE((CASE WHEN COUNT(DISTINCT t1.views) betwnn 50 AND 100 THEN COUNT(DISTINCT t1.views) + 5 ELSE COUNT(DISTINCT t1.views) END) + 
        (CASE WHEN COUNT(DISTINCT t2.views) betwnn 50 AND 100 THEN COUNT(DISTINCT t2.views) + 5 ELSE COUNT(DISTINCT t2.views) END), 0) AS total_points 
      FROM table_1 t1 
      LEFT JOIN table_2 t2 ON t1.id = t2.id 
      GROUP BY t1.primary_id 
      ORDER BY total_points 
     ) AS T1, (SELECT @rank := 0) AS r 
     ORDER BY total_points DESC 
    ) AS A 
GROUP BY rank WITH ROLLUP