2010-11-16 2 views
1

Привет, просто не могу построить MYSQL-запрос Im after.Использование условных операторов и переменных MYSQL в запросе

Скажем, у меня есть результат из двух столбцов: 1) имя браузера и 2) количество браузеров.

Если он становится сложным, я хочу, чтобы достигнуть 90% общего количества, чтобы переименовать все другие браузеры, как и другие, и пометить левый процент соответственно.

Я знаю, что я могу получить общее количество как переменные, прежде чем начать основное утверждение:

SELECT @total := COUNT(id) FROM browser_table WHERE start LIKE "2010%"; 

Тогда я могу сгруппировать результаты по браузеру:

SELECT browser, COUNT(id) AS visits 
FROM browser_table 
WHERE start LIKE "2010%" 
GROUP BY browser 

Я знаю, что нужно (и переменную счетчика) для сортировки столбцов, но не уверены в том, как реализовать вышеуказанный запрос:

CASE 
    WHEN counter >= 0.9* @total THEN 'other' 
    ELSE browser 
END AS browser; 

Надеюсь, что это имеет смысл? Спасибо за ваше время ....

ответ

0

Вот один подход ...

Вы можете рассчитать текущую сумму, основанную на this answer. Пример:

SET @rt := 0; 
SELECT 
    browser, 
    visits, 
    (@rt := @rt + visits) AS running_total 
FROM 
    (
     SELECT 
      browser, 
      COUNT(id) AS visits 
     FROM 
      browser_table 
     WHERE 
      start LIKE '2010%' 
     GROUP BY 
      browser 
     ORDER BY 
      visits DESC 
    ) AS sq 
; 


После того, как вы есть, что на месте, вы можете построить на том, что для создания «Другой» категории:

SET @threshold := (SELECT COUNT(id) FROM browser_table WHERE start LIKE '2010%') * 0.90; 
SET @rt := 0; 
SELECT 
    browser, 
    SUM(visits) AS total_visits 
FROM 
    (
     SELECT 
      IF (@rt < @threshold, browser, 'Other') AS browser, 
      visits, 
      (@rt := @rt + visits) AS running_total 
     FROM 
      (
       SELECT 
        browser, 
        COUNT(id) AS visits 
       FROM 
        browser_table 
       WHERE 
        start LIKE '2010%' 
       GROUP BY 
        browser 
      ) AS sq1 
     ORDER BY 
      visits DESC 
    ) AS sq2 
GROUP BY 
    browser 
ORDER BY 
    total_visits DESC 
;