gpt4 book ai didi

mysql - SQL 查询帮助 - 每个不同的列值有 10 条记录

转载 作者:可可西里 更新时间:2023-11-01 08:07:45 24 4
gpt4 key购买 nike

我有一个包含汽车列表的汽车表。表结构类似于:

 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 order by make, id,但你可以选择年份。只要 make 是第一个,它就会工作。你可以放弃其他任何东西来进行“随机”选择。随心所欲地排序最终结果。

这是如何工作的:

  • 最内层的查询只是对准备编号的行进行排序 - 别名为 ordered
  • 下一个包装器查询计算生成组中的行号(@i - 从零开始计数)- 别名为 indexed@prev 保留上一行的 make
  • 外层查询从indexed中选择行号小于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 |
+------+----+-------+------+

关于mysql - SQL 查询帮助 - 每个不同的列值有 10 条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7074750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com