选择具有多个组和总和的数据字段

时间:2012-01-31 18:32:36

标签: sql tsql sorting group-by sql-order-by

我似乎无法按多个数据字段进行分组,并对特定的分组列求和。

我想将Person分组给客户,然后将客户分组到价格,然后汇总价格。合并金额(价格)最高的人应按升序排列。

示例:

table customer
-----------
customer | common_id
 green        2
 blue         2
 orange       1

table invoice
 ----------
 person | price | common_id
 bob        2330     1
 greg       360      2    
 greg       170      2

SELECT DISTINCT
    min(person) As person,min(customer) AS customer, sum(price) as price
FROM invoice a LEFT JOIN customer b ON a.common_id = b.common_id 
GROUP BY customer,price
ORDER BY person

我想要的结果是:

**BOB:** 
Orange, $2230

**GREG:**
green,  $360
blue,$170

The colors are the customer, that GREG and Bob handle. Each color has a price. 

3 个答案:

答案 0 :(得分:4)

我可以看到两个问题。一个是有点挑剔,一个是非常基础。


在SQL中显示数据

SQL返回表格数据集。它无法返回带有标题的子集,看起来像是一个数据透视表。

这意味着这是不可能的......

**BOB:** 
Orange, $2230

**GREG:**
green,  $360
blue,   $170

但是这个 可能......

Bob,  Orange, $2230
Greg, Green,  $360
Greg, Blue,   $170


关联数据

我可以直观地看到你们如何将数据联系在一起......

table customer                 table invoice
--------------                 -------------
customer | common_id           person | price |common_id
 green        2                 greg     360       2
 blue         2                 greg     170       2
 orange       1                 bob     2330       1

但SQL没有任何隐含的排序。只有表达式可以表明它们是相关的,事情才能相关。例如,以下同样可能......

table customer                 table invoice
--------------                 -------------
customer | common_id           person | price |common_id
 green        2                 greg     170       2      \ These two have 
 blue         2                 greg     360       2      / been swapped
 orange       1                 bob     2330       1

这意味着您需要明确说明哪个customer记录与哪个invoice记录相匹配的规则(以及可能的其他字段),尤其是当两者中的倍数具有相同的common_id时。

规则的一个示例可能是,最低价格始终按字母顺序与第一个客户匹配。但是,如果您在customer common_id = 2中有 三个 记录,但只有 两个,会发生什么情况<{1}} invoice中{1}}的记录?或者记录的数量总是匹配,你是否强制执行?

您很可能需要额外的一部分(或多条)信息才能知道哪些记录彼此相关。

答案 1 :(得分:0)

你应该使用除sum之外的所有选定字段进行分组,然后函数group_concat(mysql)可以帮助你连接group子句的结果行

答案 2 :(得分:0)

我不确定你怎么可能这样做。格雷格有2种颜色,2种价格,你如何确定哪种颜色与哪种颜色相符?

Greg Blue 170或​​Greg Blue 360​​ ????或将绿色附加到任何一个价格?

我认为颜色需要具有独特的识别符,与人独特的识别者分开。

只是一个想法。