【问题标题】:how to limit the amount of sql data that i want to display?如何限制我要显示的 sql 数据量?
【发布时间】:2012-01-02 18:36:55
【问题描述】:

我的数据库中的示例:

子类 |物品 ---------------------- 水果 |橘子 水果 |苹果 水果 |菠萝 水果 |樱桃 蔬菜 |土豆 蔬菜 |芹菜 蔬菜 |姜 蔬菜 |胡萝卜 饮料 |咖啡 饮料 |茶 饮料 |可乐 饮料 |百事可乐

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

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

我得到的是:

子类 |物品 ---------------------- 水果 |苹果 蔬菜 |胡萝卜 饮料 |可乐

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

子类 |物品 ---------------------- 水果 |苹果 水果 |樱桃 蔬菜 |胡萝卜 蔬菜 |芹菜 饮料 |可乐 饮料 |咖啡

【问题讨论】:

  • 请澄清。您显示您正在从包含 Item 列的表中进行选择,但您显示的结果不包括此列。它们包括 category,它不在您的原始 SELECT 语句中。我不清楚您希望输出是什么样子,因为显示的结果与书面描述不一致。

标签: sql database sqlite


【解决方案1】:

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

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

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

如果您只想显示每个类别的前 5 个,则无法通过单个查询来实现。

【讨论】:

    【解决方案2】:

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

    我建议你添加 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 上测试过了。

    【讨论】:

      【解决方案3】:

      在 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

      【讨论】:

        猜你喜欢
        • 2019-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-19
        • 2020-12-09
        • 2012-02-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多