Как ограничить количество данных SQL, которые я хочу отобразить? - PullRequest
0 голосов
/ 21 ноября 2011

пример того, что у меня есть в моей базе данных:

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 голосов
/ 21 ноября 2011

* Кто-то изменил исходный вопрос.Вопрос совсем не такой, как прежде.Так что мой ответ не будет полезен.*

Я рекомендую добавить поле идентификатора в качестве первичного ключа, а идентификатор должен быть 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
           )

Iнадеюсь, что это работает на SQLite.Я проверил это на MySQL.

0 голосов
/ 22 ноября 2011

В 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

0 голосов
/ 21 ноября 2011

Ну, в большинстве реализаций SQL есть ключевое слово: LIMIT <#>, которое вы можете использовать в конце вашего запроса, заменив # на количество отображаемых строк.Я не знаю, как вы отформатировали свои данные, но если вы отбросите их в конце запроса, этого будет достаточно.

Вы не можете использовать предложение GROUP BY, потому что тогда оно будет отображать только один элемент вгруппа.Тем не менее, вы также можете использовать предложение ORDER BY, и это можно использовать для более чем одного элемента.Например ...

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

Если вы хотите отобразить только 5 лучших из каждой категории, вы не сможете сделать это с помощью одного запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...