【问题标题】:sql query distinctsql查询不同
【发布时间】:2010-08-25 10:25:36
【问题描述】:

我的数据库记录如下:-

cartid  orderid   foodid   qty
==============================
92      107       5        1
93      107       5        1
94      107       5        1
95      107       11       1
96      107       5        1
97      108       5        1

可以安排成这种形式吗?
假设最大 sum(qty)=3

foodid   sum(qty)
=================
5        3
11       1
5        2

【问题讨论】:

  • 我相信你只想要前 2 行,对吧?
  • 你需要在你的 sql 和表上使用 group by 条件,每个记录字段都有不同的值,但是 foodid 可以用于分组..如果按食物 id 分组,结果应该是 sum( qty) 5 for foodid 5 and sum(qty) 1 for foodid 11 for Db values that you post

标签: sql-server gaps-and-islands


【解决方案1】:

您看起来正在尝试对由cartid 排序的同一foodid 的连续范围(岛)求和?

;with cart as
(
SELECT 92 AS cartid,107 AS orderid,5 AS foodid, 1 AS qty UNION ALL
SELECT 93,107,5, 1 UNION ALL
SELECT 94,107,5, 1 UNION ALL
SELECT 95,107,11,1 UNION ALL
SELECT 96,107,5, 1 UNION ALL
SELECT 97,108,5, 1 

),
NumberedCart As
(
SELECT cartid,foodid,qty,
ROW_NUMBER() OVER (ORDER BY cartid)- 
       ROW_NUMBER() OVER (PARTITION BY foodid ORDER BY cartid) AS G
 FROM cart
 )

 SELECT foodid, SUM(qty) AS [sum(qty)]
 FROM NumberedCart
 GROUP BY foodid,G
 ORDER BY MIN(cartid)

返回

foodid      sum(qty)
----------- -----------
5           3
11          1
5           2

【讨论】:

    【解决方案2】:

    我不确定你所说的 Max Sum(qty)=3 是什么意思...

    但这里有一些 SQL 可以帮助您入门:

    SELECT        foodid
                , SUM(qty)
    FROM        YourTableName
    GROUP BY    foodid
    

    【讨论】:

    • 我认为问题的微妙之处在于,特定的 foodid 应该有多行,其中记录与其他 foodid 混合(按 carid 顺序)。例如根据序列对集合进行分组,直到不同的 foodid
    • 这不是 maniacCow 想要的。如果您看到结果,则 foodid=5 出现了两次。
    猜你喜欢
    • 2016-12-24
    • 1970-01-01
    • 2015-11-20
    • 2013-08-09
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多