我在数据库中拥有的例子:
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
答案 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