3

在尝试进行分页时,我遇到了这个问题。我的桌子-

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 个数据库结果。在显示该品牌的所有模型时,是否可以有查询限制并将我的结果抵消到两个品牌?

对不起,如果我不清楚!

4

3 回答 3

3

很明显。试试这个:

select * from t t1
join (
  select distinct carBrand from t
  limit 2
) s on t1.carBrand = s.carBrand

limit 2应用您想要的顺序之前。

于 2012-04-09T22:44:27.180 回答
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

现在,你没有说你想如何选择这两个品牌——你只是在你的例子中列出了福特和菲亚特——我不知道你是怎么选择的。如果您想要的不是按字母顺序排序的标准,那是可行的,但更难。

SQL Fiddle 和所有这些的结果: http ://sqlfiddle.com/#!2/33a8f/3

于 2012-04-10T01:08:57.340 回答
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在我看来没有必要。

于 2012-04-09T22:42:42.840 回答