在尝试分页时,我遇到了这个问题。 我的桌子 -
ID CarBrand Car Model
---------------------------
1 Alfa Romeo Guilietta
2 Alfa Romeo Mito
3 Audi A3
4 Audi R8
5 Audi TT
6 Fiat Punto
7 Fiat Panda
8 Ford Mondeo
9 Ford Mustang
10 Nissan Almera
11 Nissan Note
12 Nissan Qashqai
13 Toyota Aygo
14 Toyota Prius
15 Volkswagen Beetle
16 Volkswagen Golf
17 Volkswagen Polo
18 Volkswagen Up
我将数据显示为两组:
-Fiat - Punto
Panda
-Ford - Mondeo
Mustang
所以有2个品牌,但有4个数据库结果。 是否可以设置查询限制并将我的结果偏移到两个品牌,同时显示该品牌的所有模型?
很抱歉,如果我不清楚的话!
答案 0 :(得分:3)
很明显。试试这个:
select * from t t1
join (
select distinct carBrand from t
limit 2
) s on t1.carBrand = s.carBrand
在limit 2
应用您想要的订单之前。
答案 1 :(得分:1)
要获得限制,不使用limit
关键字,您可以强制计数。
例如,给定表定义
create table cars (id int,
carBrand char(10),
carModel char(10));
这将为您提供前2个汽车品牌的所有汽车模型
select cars.carBrand, cars.carModel
from cars
where ((select count(*) from
(select distinct carBrand from cars) as carBrands
where carBrands.carBrand < cars.carBrand) < 2)
order by cars.carBrand, cars.carModel;
这会创建一个列出carBrands
的内联表,然后将其加入汽车,以获取前2个品牌中所有汽车的列表。 count(*) .... < 2
强制执行限制。例如,在上面的数据中考虑'Ford'
。在“Ford'
的情况下,有3个品牌按字母顺序排列< 'Ford'
,因此上面的count(*)
= 3.由于3不小于2,没有'Ford'
辆汽车出现在输出中。
测试数据的输出为:
CARBRAND CARMODEL
Alfa Romeo Guilietta
Alfa Romeo Mito
Audi A3
Audi R8
Audi TT
现在,你没有说你想如何挑选这2个品牌 - 你刚才在你的例子中列出了福特和菲亚特 - 我不知道你是怎么碰到这些的。如果你想要一些非按字母顺序排序的标准,这是可行的,但更难。
SQL小提琴和所有这些的结果:http://sqlfiddle.com/#!2/33a8f/3
答案 2 :(得分:0)
这是数据库设计的问题。也许您应该将数据拆分为两个表model
(模型名称)和brand
(品牌名称)。然后你可以这样写一个查询:
SELECT m.name, b.name
FROM model m
INNER JOIN brand b
WHERE b.id IN (
SELECT id
FROM brand
ORDER BY name ASC
LIMIT 2 OFFSET 0
)
我没有测试代码。我认为不需要GROUP BY
。