【问题标题】:SQL Query to pull a certain amount of results per itemSQL Query 为每个项目提取一定数量的结果
【发布时间】:2014-08-30 00:09:00
【问题描述】:

我正在寻找一种更好的方法来仅使用 sql 而不是 C# 来生成列表。我做错了似乎很简单

假设我有一个名为 PhoneNumbers 的表,其中包含 Number/City/State

示例(但有数百万个数字):

NUMBER          CITY        STATE
555-555-5555    New York    NY
111-111-1111    Los Angeles CA
222-222-2222    Houston     TX
333-333-3333    Miami       FL

我需要一个从每个州返回 10 个电话号码的查询

现在我正在单独对所有 50 个州运行一个查询,然后将它们组合到一个数据集中,但它是一个大数据库,所以它很慢,我希望有一个简单的方法来拉回我需要的数据。

【问题讨论】:

  • 您使用的是哪个 DBMS?
  • 请指出哪种 dbms 类型,因为解决方案选项因类型而异

标签: sql limit-per-group


【解决方案1】:

以下查询应该适用于 Oracle 和 SQL Server,但不适用于 MySQL:

with cte as
(select number, city, state,
 row_number() over (partition by state order by state) rn
 from yourtable)

select number,city,state
from cte
where rn <= 10

请注意,如果您需要按特定字段排序的前 10 行,则必须调整 order by 以满足您的需要。

【讨论】:

    【解决方案2】:

    不同,但对于 MSSQL:

    with cteByStateas (
       select row_number() over (partition by STATE order by CITY) as RowNo,
              number,
              city,
              state
    )
    select * 
      from cteByState
     where RowNo <= 10
    

    请注意,您没有指定您想要的前 10 个数字,或者它们是否应该是随机的

    对于 mysql,它的做法有点不同,使用变量

    【讨论】:

      【解决方案3】:

      您可以简单地使用UNION ALL 子句。像这样的东西:-

      (SELECT NUMBER, CITY, STATE FROM TABLE_NAME WHERE STATE = 'NY' ORDER BY CITY LIMIT 10)
      UNION ALL
      (SELECT NUMBER, CITY, STATE FROM TABLE_NAME WHERE STATE = 'CA' ORDER BY CITY LIMIT 10)
      UNION ALL
      (SELECT NUMBER, CITY, STATE FROM TABLE_NAME WHERE STATE = 'TX' ORDER BY CITY LIMIT 10)
      UNION ALL
      (SELECT NUMBER, CITY, STATE FROM TABLE_NAME WHERE STATE = 'FL' ORDER BY CITY LIMIT 10)
      

      希望对你有帮助。

      【讨论】:

      • 我认为 OP 已经在使用这种方法并想要另一种方法。Right now i am individually just running a query against all 50 states and then combining them in a dataset
      • 用户没有提出他的查询,这就是为什么我只是给他一个更容易理解的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多