我似乎无法按多个数据字段进行分组,并对特定的分组列求和。
我想将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.
答案 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 ????或将绿色附加到任何一个价格?
我认为颜色需要具有独特的识别符,与人独特的识别者分开。
只是一个想法。