MySQL, как сгруппировать значения, не указанные в предложении WHERE, как «другие»? - PullRequest
0 голосов
/ 17 февраля 2012

Мне нужно составить статистический отчет о посещениях сайта. В отчете пользователи могут указывать различные параметры. Пока что, когда они выбирают значения для параметра, добавляется дополнительное предложение WHERE, например:

SELECT id_browser, COUNT(visits)
FROM table
WHERE [...] 
AND id_browser IN (1, 3, 6)
GROUP BY id_browser

Но что мне действительно нужно, так это показать статистику по остальным браузерам, но мне нужно сгруппировать их вместе как "другие браузеры". Как я могу это сделать?

Ответы [ 5 ]

1 голос
/ 17 февраля 2012

Попробуйте ниже:

    SELECT id_browser, 
    count(if(id_browser IN (1, 3, 6),1,0)) as 136browser,
    count(if(id_browser Not IN (1, 3, 6),1,0)) as other_browser
    FROM table
    WHERE [...] 
    GROUP BY id_browser
1 голос
/ 17 февраля 2012

Использовать CASE синтаксис:

например.,

SELECT CASE
           WHEN id_browser = 1 THEN 'IE'      -- I am just inventing
           WHEN id_browser = 3 THEN 'Chrome'  -- some mappings
           WHEN id_browser = 6 THEN 'Firefox' -- for these
           ELSE 'All Other Browsers'
       END
       ,COUNT(visits)
 FROM [table]
WHERE [...] 
GROUP BY CASE
           WHEN id_browser = 1 THEN 'IE'
           WHEN id_browser = 3 THEN 'Chrome'
           WHEN id_browser = 6 THEN 'Firefox'
           ELSE 'All Other Browsers'
       END
0 голосов
/ 17 февраля 2012
Try this

SELECT 
   SUM( CASE WHEN id_browser =1 then 1 else 0 ) AS IE
   SUM( CASE WHEN id_browser =2 then 1 else 0 ) AS FIREFOX
   SUM( CASE WHEN id_browser =3 then 1 else 0 ) AS CHROME
   SUM( CASE WHEN id_browser not in (1,2,3) then 1 else 0 ) AS OTHERS
FROM tableName
0 голосов
/ 17 февраля 2012

Похоже, это простой союз:

select id_browser, count(visits) from table
where [...] and id_browser in (1, 3, 6)
group by id_browser
union
select 'Other browsers', count(visits) from table
where [...] and id_browser not in (1, 3, 6)
group by id_browser
0 голосов
/ 17 февраля 2012

Вы можете объединить результаты, используя UNION

Попробуйте это:

SELECT *
FROM
(
    SELECT id_browser, COUNT(visits)
    FROM table
    WHERE [...] 
    AND id_browser IN (1, 3, 6)
    GROUP BY id_browser
         UNION
    SELECT 'Other Browser' as id_browser, COUNT(visits)
    FROM table
    WHERE [...] 
    AND id_browser NOT IN (1, 3, 6)
) AllResult
...