繁体   English   中英

构造Mysql查询

[英]construct Mysql Query

假设我有一个名为tblSchoolSupplies的表,如下所示:

itemsID categoryID subCategoryID itemName
1          1           1          pencil
2          1           1          eraser
3          2           2          toilet paper
4          1           2          bond paper
5          1           3          bag
6          1           1          ruler
7          1           2          compass
8          1           3          pencil case
9          2           2          soap

我想做的是构造一个满足以下4个条件的查询:

1)在categoryID = 1下选择行
2)按subCategoryID对行进行分组
3)每个subCategoryID限制2行
4)行必须随机选择

道格·R的评论应引起关注。 请始终附上您尝试过的内容。 您遇到的问题难度各不相同,我想一个答案会帮助您和其他人。

示例表和查询在这里: http : //sqlfiddle.com/#!9/3beee/6

为了选择类别为1的记录,请使用以下查询。 WHERE子句有助于将记录仅过滤到类别1

select * from tblSchoolSupplies where categoryID = 1;

按子类别对行进行分组需要更多信息。 通常,您将信息分组以获得统计信息。 例如,每个子类别中有多少个项目,或者每个子类别中有多少个类别。 注意,我正在选择subCategoryID并对其进行GROUP BY 其他列是统计计算。 您将遇到的大多数(如果不是全部) GROUP BY查询将具有一个类似于subCategoryID的dimension ,该dimension与诸如sumcountavg等统计函数一起分组。

select 
  subCategoryID, 
  count(*) as items_in_subcategory,
  count(distinct categoryID) as distinct_categories
from tblSchoolSupplies
group by subCategoryID;

与第一个问题相比,每个subCategoryID限制2行更具挑战性。 以下答案基于问题12113699

-- limit 2 rows per subCategoryID
set @number := 0;
set @subCategoryID := '';

select *
from 
(
   select *,
      @number:=if(@subCategoryID = subCategoryID, @number + 1, 1) as rownum,
      @subCategoryID:=subCategoryID as field1
  from tblSchoolSupplies
  order by subCategoryID, itemsID
) as subcat 
where subcat.rownum < 3;

使用随机排序顺序并仅限制1条记录输出将为您提供随机选择的行。 请通读问题4329396中的讨论以获得对相似问题的不同看法。

select * from tblSchoolSupplies order by rand() limit 1;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM