在MySQL中我将如何做到这一点?

在MySQL中我将如何做到这一点?,mysql,Mysql,假设我有一个小部件数据库。我展示了每个小部件的前十个组的列表,按类别分开 假设我想显示类别a中所有小部件的列表,但我想根据该类别中小部件的总数对它们进行排序,并且只显示前10个分组 所以,我的清单可能是这样的 A类中的顶级分组 1990年,公司1生产了100个小部件。 1993年1号公司生产了90个小部件。 1993年,第三公司生产了70个小部件。 等(10组) 这一部分很简单,但现在让我们假设我希望某个分组始终显示在列表中,即使它实际上没有进入前十名 假设我总是想显示公司1在2009年生产的小

假设我有一个小部件数据库。我展示了每个小部件的前十个组的列表,按类别分开

假设我想显示类别a中所有小部件的列表,但我想根据该类别中小部件的总数对它们进行排序,并且只显示前10个分组

所以,我的清单可能是这样的

A类中的顶级分组

1990年,公司1生产了100个小部件。
1993年1号公司生产了90个小部件。
1993年,第三公司生产了70个小部件。
等(10组)

这一部分很简单,但现在让我们假设我希望某个分组始终显示在列表中,即使它实际上没有进入前十名

假设我总是想显示公司1在2009年生产的小部件的数量,但我希望这个分组随机显示在我的列表中的某个地方(不是第一个或最后一个)

因此,结束列表应该类似于

A类中的顶级分组

1990年,公司1生产了100个小部件。
1993年1号公司生产了90个小部件。
2009年,公司1生产了30个小部件。
1993年,第三公司生产了70个小部件。

我将如何在MySQL中实现这一点

谢谢

编辑:

目前,我的查询如下所示

        SELECT
            year, 
            manufacturer,
            MAX(price) AS price,
            image_url,
            COUNT(id) AS total
        FROM 
            widgets
        WHERE
            category_id = A
        AND
            year <> ''
        AND
            manufacturer <> ''
        GROUP BY  
            category_id,
            manufacturer,
            year
        ORDER BY  
            total DESC,
            price ASC
        LIMIT 
            10
    );
选择
年,
制造商
最高(价格)作为价格,
图片(网址),
总数(id)
从…起
小部件
哪里
类别_id=A
及
年份“
及
制造商“
分组
类别识别码,
制造商
年
订购人
总说明,
价格ASC
极限
10
);
这里没有强制分组


位置不一定是随机的,只是不应该是极端的。该列表应包括10组,包括强制列表。因此9+1我将使用联合查询:您当前的查询将2009年的查询联合起来,然后在表示层处理排序。

您可以编写两个单独的查询(一个用于所有公司,另一个仅用于公司1),然后使用联合将它们连接在一起。最后,添加ORDER BY RAND()。 看起来像

SELECT * FROM
(
   SELECT company_id, company_name, year, count(*)  as num_widgets 
   .... 
   LIMIT 10
   UNION DISTINCT
   SELECT company_id, company_name, year, count(*)  as num_widgets 
   ...
   WHERE company_id =1      
   ...
   LIMIT 10
)x
ORDER BY RAND();

您可以在2009年为公司1添加一个字段,并将其包含在where子句中。差不多

select*from company,其中group='some group'或included=包含的真实订单,widgets\u made limit 10


对于随机部分,您可以将其作为子查询,然后包含一个列,如果您创建的字段为true,则该列的随机数为1到10,否则为rownum,然后按该列排序

您是否询问有关编写SQL查询的问题?[@bear会吃掉您],我认为OP是我如何在MySQL中实现这一点的?只是一个问题-为什么随机放置?此外,除非X公司已经在10家公司中,否则该名单是否会是10家+X公司?或者,除非X公司已经在列表中,否则它会是9+X公司吗?我不会仅仅因为演示要求而添加一列,但我会使用“case when 2009…”语句来实现这个想法。