Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在查询中使用MYSQL条件语句和变量_Mysql_Conditional Statements - Fatal编程技术网

在查询中使用MYSQL条件语句和变量

在查询中使用MYSQL条件语句和变量,mysql,conditional-statements,Mysql,Conditional Statements,Hi似乎无法在Im之后构建MYSQL查询 假设我有两列结果:1个浏览器名称和2个浏览器计数 更复杂的是,一旦达到总数的90%,我想将所有其他浏览器重命名为其他浏览器,并相应地标记剩余的百分比 我知道在开始主语句之前,我可以将总计数作为一个变量: SELECT @total := COUNT(id) FROM browser_table WHERE start LIKE "2010%"; 然后我可以按浏览器对结果进行分组: SELECT browser, COUNT(id) AS visits

Hi似乎无法在Im之后构建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语句和一个计数器变量来对列进行排序,但不确定如何在上述查询中实现:

CASE 
  WHEN counter >= 0.9* @total THEN 'other'
  ELSE browser
END AS browser;
希望这有意义?感谢您抽出时间……

这里有一种方法

您可以根据计算运行总数。例如:

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
;