在GROUP BY查询中检索备用属性值?

时间:2010-07-29 23:00:06

标签: sql mysql aggregate-functions

让我解释一下我对这个问题的意思:

让我说我必须这样的表:

customers
id customer location
1   Adam     UK
2   Pete     US

values
id value
1   10
1    7
2    3
2   41

让我们暂时忽略那个(以及下面的查询)没有多大意义。这是一个简化的例子。

现在,如果我运行此查询

SELECT id, customer, value FROM customers INNER JOIN values GROUP BY id

我应该得到这个结果(与id不同)

id customer value
1    Adam    10
2    Pete     3

我希望能够做到的是在搜索结果列表中使用它,但是为了实际显示结果,我想做这样的事情:

Customer: Adam
Values: 10, 7

所以,基本上,虽然我需要有一个与ID不同的结果集,但我仍然想以某种方式保存GROUP BY删除的行以显示如上所示的值列表。这样做的最佳方式是什么?

2 个答案:

答案 0 :(得分:5)

答案 1 :(得分:0)

从技术上讲,即使MySQL允许,以下内容也不是有效的SQL:

Select customers.id, customers.customer, values.value 
From customers 
    Inner Join values 
        On values.id = customers.id
Group By customers.id

SQL规范要求Select子句中的每一列都在Group By或aggregate函数中引用。但是,考虑到你在帖子后面所说的内容,我认为你想要的是GROUP_CONCAT,这是Erik(+1)首先提到的,它是MySQL特有的功能:

Select customers.customer, Group_Concat(values.value)
From customers 
    Inner Join values 
        On values.id = customers.id
Group By customers.customer