mysql 显示10条数据,mysql-SQL查询帮助-每个不同的列值有10条记录

我有一个汽车表,其中包含汽车清单.

表结构如下所示:

cars

- id

- title

- make

- year

我想要一个查询,该查询返回每个品牌的10辆汽车.

等效于以下伪代码的内容:

car_makes = select distinct make from cars

for each make in car_makes

select id, title, make from clcars where make = $make limit 10;

end

这是我尝试失败的结果:

select id,title,make

from cars where make in

(select distinct make from cars)

group by make;

—每次返回仅返回一条记录.

select a.id,a.title,a.make

from cars a left join

(select distinct make from cars) car_make

on a.make = car_make.make;

这将返回每条记录.

我每辆汽车只需要10条记录.

谢谢你的帮助

解决方法:

这将给您您想要的:

set @prev := '', @i := 0;

select make, id, title, year

from (select id, title, make, year, (@i := if(@prev = make, @i + 1, 0)) as idx, (@prev := make)

from (select id, title, make, year from cars order by make, id) ordered) indexed

where idx < 10

要更改获取哪10行的选择,请更改最内层查询的顺序;我按制造商,ID选择ID顺序,但可以选择年份.只要make首先,它将起作用.您可以选择“随机”选择其他任何东西.

根据需要订购最终结果.

工作原理:

>最里面的查询只是对准备好编号的行进行排序-别名为已排序

>下一个包装器查询将计算make组(别名为索引)中的行号(@i-从零开始计数). @prev保存上一行的品牌

>外部查询从行号小于10的索引中选择数据

这是测试代码,边缘情况为1宝马,3 gmc和13福特:

create table cars (id int not null primary key auto_increment, title text, make text, year text);

insert into cars (title, make, year) values

('f1', 'ford', 2000), ('f2', 'ford', 2001), ('f3', 'ford', 2002), ('f4', 'ford', 2003),

('f5', 'ford', 2004), ('f6', 'ford', 2005), ('f7', 'ford', 2006), ('f8', 'ford', 2007),

('f9', 'ford', 2008), ('f10', 'ford', 2009), ('f11', 'ford', 2010), ('f12', 'ford', 2011),

('f13', 'ford', 2012), ('g1', 'gmc', 2000), ('g2', 'gmc', 2001), ('g3', 'gmc', 2002),

('b1', 'bmw', 2002);

以上查询的输出:

+------+----+-------+------+

| make | id | title | year |

+------+----+-------+------+

| bmw | 17 | b1 | 2002 |

| ford | 1 | f1 | 2000 |

| ford | 2 | f2 | 2001 |

| ford | 3 | f3 | 2002 |

| ford | 4 | f4 | 2003 |

| ford | 5 | f5 | 2004 |

| ford | 6 | f6 | 2005 |

| ford | 7 | f7 | 2006 |

| ford | 8 | f8 | 2007 |

| ford | 9 | f9 | 2008 |

| ford | 10 | f10 | 2009 |

| gmc | 14 | g1 | 2000 |

| gmc | 15 | g2 | 2001 |

| gmc | 16 | g3 | 2002 |

+------+----+-------+------+

标签:greatest-n-per-group,sql,mysql

来源: https://codeday.me/bug/20191102/1990404.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值