[英]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
与诸如sum
, count
, avg
等统计函数一起分组。
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.