2014-01-25 3 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 (мой запрос) 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 
Смежные вопросы