2010-09-08 144 views
1

我有这样的前五列数据库:SUM和DISTINCT的MYSQL查询?

ID NAME QUANTITY PRICE KIND 
1 Dog  2  5  A 
2 Cat  1  6  B 
3 Dog  2  5  C 
4 Bird  5  5  C 

(DOG数量和价格将始终是相同的)

我想要做的就是像

SELECT善良,SUM(数量*价格)GROUP BY KIND WHERE明确的名称

所以,我得到的东西看起来是这样的:

 
A 10 
B 6 
C 25 

(重复的狗是消除。)

我知道我上面的语法错误严重 - 它只是似乎是解释我在寻找什么样的事情的最有说服力的方法。

换句话说,我想摆脱非明显的NAMES然后SUM其余。我似乎可以做一个或另一个,但不能两个。

任何想法?如果情况变得更糟,我可以将它作为PHP中的循环而不是单个MYSQL查询。

+2

你如何指定哪个副本被删除? – 2010-09-08 21:11:17

+0

我假设一个字母最接近的字母被保留。 – Hammerite 2010-09-08 21:25:59

回答

1

我并不十分清楚规则是什么或为什么你的表格是以这种格式(重复的名称,数量,价格),但这里是获得预期输出的一种方法。

select kind, SUM(quantity*price) 
from 
(
SELECT name, quantity, price, min(kind) kind 
FROM YourTable 
group by name, quantity, price 
) t 
group by kind 
0

在这里,我选择了最低的ID作为一个项目,以保持:

Select T.Kind, Sum(T.Quantity * T.Price) As Total 
From Table As T 
Where Id = (
      Select Min(T2.Id) 
      From Table As T2 
      Where T2.Name = T.Name 
      ) 
Group By T.Kind 

假设你的表是名称和一种独特的,你可以这样做:

Select T.Kind, Sum(T.Quantity * T.Price) As Total 
From Table As T 
Where T.Kind = (
       Select Min(T2.Kind) 
       From Table As T2 
       Where T2.Name = T.Name 
       ) 
Group By T.Kind