如何限制我想显示的sql数据量?

时间:2011-11-21 08:02:14

标签: sql database sqlite

我在数据库中拥有的例子:

sub-category | item
-----------------------
Fruit        | Orange
Fruit        | Apple
Fruit        | Pineapple
Fruit        | Cherry
Vegetable    | Potato
Vegetable    | Celery
Vegetable    | Ginger
Vegetable    | Carrot
Drinks       | Coffee
Drinks       | Tea
Drinks       | Coke
Drinks       | Pepsi

我尝试使用以下代码,但每个类别只显示1个项目,而不是显示所有项目:

SELECT SubCategory, Item
FROM ItemList 
GROUP BY SubCategory 
ORDER BY item DESC 

我得到的是:

sub-category | item
-----------------------
Fruit        | Apple
Vegetable    | Carrot
Drinks       | Coke

我想要的是以下(显示限制为2的示例):

sub-category | item
-----------------------
Fruit        | Apple
Fruit        | Cherry
Vegetable    | Carrot
Vegetable    | Celery
Drinks       | Coke
Drinks       | Coffee

3 个答案:

答案 0 :(得分:0)

好吧,大多数SQL实现都有一个关键字:LIMIT<#>您可以在查询结束时使用,将#替换为您想要显示的行数。我不知道你是如何格式化你的数据的,但是如果你在查询结束时放弃它,那就足够了。

您不能使用GROUP BY子句,因为它只会在每个组中显示一个项目。但是,您也可以使用ORDER BY子句,这可以用于多个项目。例如......

SELECT * FROM table ORDER BY category DESC,subCategory DESC LIMIT 5;

如果您只想显示每个类别中的前5名,则无法通过单个查询执行此操作。

答案 1 :(得分:0)

*有人改变了原来的问题。这个问题与以前完全不一样。所以我的回答没有用。 *

我建议您将ID字段添加为主键,ID应为int。

然后你可以使用这段代码

select t1.*
from yourtable t1
where 5 >= (select count(t2.id)
             from yourtable t2
             where t1.category= t2.category
             and t1.id >= t2.id
           )

我希望这适用于SQLite。我在MySQL上测试过它。

答案 2 :(得分:0)

在MSSQL中,您可以按列分区,然后使用它来过滤

SELECT
    SubCategory, 
    Item
FROM
    (
    SELECT 
        SubCategory, 
        Item, 
        ROW_NUMBER() OVER(partition SubCategory, ORDER BY SubCategory) AS seq
    FROM 
        ItemList 
    ) AS t
WHERE seq < 3

http://msdn.microsoft.com/en-us/library/ms189461.aspx