当前位置: 首页 > 面试题库 >

MySQL-返回每个GROUP BY的X号

越景天
2023-03-14
问题内容

在此查询中,我指定要退回(硬编码)的汽车型号。因此,下面的SQL为每种模型返回 一条 记录:

SELECT
        *
    FROM
        main
    WHERE
        (
            (marka_name = 'SUBARU' AND model_name = 'IMPREZA' AND (kuzov = 'GC8' OR kuzov = 'GF8')) OR
            (marka_name = 'MAZDA' AND model_name = 'RX-7' AND kuzov = 'FD3S') OR
            (marka_name = 'MITSUBISHI' AND model_name = 'LANCER' AND (kuzov = 'CN9A' OR kuzov = 'CP9A')) OR
            (marka_name = 'NISSAN' AND model_name = 'SKYLINE' AND (kuzov = 'ER34' OR kuzov = 'BCNR33')) OR
            (marka_name = 'NISSAN' AND model_name = 'SILVIA' AND kuzov = 'S14') OR
            (marka_name = 'TOYOTA' AND model_name = 'CELICA' AND kuzov = 'ST205') OR
            (marka_name = 'TOYOTA' AND model_name = 'ARISTO' AND kuzov = 'JZS161') OR
            (marka_name = 'MITSUBISHI' AND model_name = 'DELICA' AND (kuzov = 'PE8W' OR kuzov = 'PD8W' OR kuzov = 'PF8W'))
        )
        AND
        (rate != 'RA' AND rate != 'RR' AND rate != 'A1' AND rate != 'A' AND rate != 'R' AND rate >= '3')
        AND
        (mileage >= 0 AND mileage <= 150000)
        AND
        (year >= 1990 AND year <= 1998)
    GROUP BY
        model_name
    ORDER BY
        mileage ASC,
        rate DESC

现在有可能在没有联合的情况下使此SQL返回多个由某个字段指定的模型。例子:

GROUP BY
    model_name
HAVING COUNT(model_name) = 2
ORDER BY
    mileage ASC,
    rate DESC

我知道“拥有数量”没有意义,但是我需要一种方法来指定每个模型要返还多少辆汽车。

http://sqlfiddle.com/#!2/421e4/1/0


问题答案:

尝试像下面那样为每个组生成行号,然后将行数限制为im以下,以显示每组2个结果。

   Select
    `marka_name`, `model_name`, `kuzov`, `mileage`, `year`, `rate`from
    (

    SELECT
     @row_num := IF(@prev_value=main.Model_Name,@row_num+1,1) AS RowNumber,
                main.*,
    @prev_value := main.Model_Name
            FROM
                main,
      (SELECT @row_num := 1) x,
          (SELECT @prev_value := '') y
            WHERE
                (
                    (marka_name = 'SUBARU' AND model_name = 'IMPREZA' AND (kuzov = 'GC8' OR kuzov = 'GF8')) OR
                    (marka_name = 'MAZDA' AND model_name = 'RX-7' AND kuzov = 'FD3S') OR
                    (marka_name = 'MITSUBISHI' AND model_name = 'LANCER' AND (kuzov = 'CN9A' OR kuzov = 'CP9A')) OR
                    (marka_name = 'NISSAN' AND model_name = 'SKYLINE' AND (kuzov = 'ER34' OR kuzov = 'BCNR33')) OR
                    (marka_name = 'NISSAN' AND model_name = 'SILVIA' AND kuzov = 'S14') OR
                    (marka_name = 'TOYOTA' AND model_name = 'CELICA' AND kuzov = 'ST205') OR
                    (marka_name = 'TOYOTA' AND model_name = 'ARISTO' AND kuzov = 'JZS161') OR
                    (marka_name = 'MITSUBISHI' AND model_name = 'DELICA' AND (kuzov = 'PE8W' OR kuzov = 'PD8W' OR kuzov = 'PF8W'))
                )
                AND
                (rate != 'RA' AND rate != 'RR' AND rate != 'A1' AND rate != 'A' AND rate != 'R' AND rate >= '3')
                AND
                (mileage >= 0 AND mileage <= 150000)
                AND
                (year >= 1990 AND year <= 1998)
            ORDER BY
                model_name,
                mileage ASC,
                rate DESC) A where A.RowNumber<=2

要获得每组2条以上的记录,只需更改最后一个子句的位置(如果您每组要获得10条结果)。写在A.RowNumber <= 10的地方

SQL小提琴演示



 类似资料:
  • 我想使用Laravel Eloquent完成任务。我在网上搜索过,没有找到任何有说服力的东西。有些人将groupBy()查询与查询生成器一起使用,如以下链接 但是我想创建这样的查询风格: 此代码仅返回第一个的计数。但是我要计算所有的。

  • 问题内容: 我希望能够为每个菜单返回5个菜单项。我试过这几个脚本,但没有运气。这是桌子 这是我现在所拥有的。我收到以下脚本的错误消息。错误:子查询返回的行数超过1。 任何建议都非常感谢。 问题答案: 您必须为此使用副作用变量

  • 问题内容: 有没有更有效的方法来执行以下操作? 这个答案看起来很相似,但这是这样做的最好方法- 如何在MySQL中为每个组选择第一行? 谢谢, 克里斯。 PS表看起来像: 数据: 结果: 有关更多详细信息,请参见http://www.barricane.com/2012/02/08/mysql-select-last-matching- row.html 。 问题答案: 试试这个查询- 然后使用E

  • 问题内容: 当我以root身份输入Python时,它将返回,但是当我尝试将其分配给变量时,会将x的值设置为0。为什么?(: 问题答案: 返回(编码的)进程出口值。意味着成功: 在Unix上,返回值是以指定的格式编码的进程的退出状态。请注意,POSIX没有指定C system()函数的返回值的含义,因此Python函数的返回值与系统有关。 您看到的输出将写入,因此您的控制台或终端不会返回给Pytho

  • 我创建了一个web app Maven项目,该项目使用RestEasy作为RESTful应用程序框架。 我的文件如下所示: 我已经将自动扫描设置为true,并创建了几个类来满足endpoint访问的需要。 但问题是,我的浏览器抛出“404 not found”,尽管我已经在类中指定了endpoint参数。 示例endpointURL:http://localhost:8080/me.randyta

  • 问题内容: 一年分为12个月。我们可以在四个星期内分解一个月。 在MySQL中,如何返回每月的星期几?(例如:第一周:2个条目,第二周:5个条目,第三周:3个条目;第四周:8个条目) 使用Week和WeekOfYear不能获得理想的结果,因为函数返回的是星期数YEAR,而不是月份。 问题答案: 我想说明的是,这可能不是分割数据的好方法-(请参阅注释),但这将使您尽可能地接近。