微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过添加值来分组

如何解决通过添加值来分组

| 我有这个查询
select ts.name as my_name,ss.step_number,p.specs,p.price,ssp.class_id from optional_system_step 
as ss join system as s on s.system_id=ss.system_id join category_description 
as cd on cd.category_id=ss.category_id join optional_system_step_product as 
ssp on ss.system_step_id=ssp.system_step_id join product as p on 
p.product_id=ssp.product_id join product_description as pd on 
pd.product_id=p.product_id join template_step as ts on 
(ts.template_id=s.optional_template_id and ts.step_number=ss.step_number)
where s.system_id = \'15\'  order by ss.step_number,ssp.class_id;
这返回这个
admin   1       999.0000    1   
admin   1       1349.0000   1   
admin   1       1699.0000   1   
pay 1       479.0000    2   
pay 1       149.0000    2   
pay 1       269.0000    3   
看起来不错,但问题是我需要按class_id分组,但在价格字段中,我需要添加三个价格,例如,我将返回这两行
admin   1       4047.0000   1   
pay 1   897.0000    2
所以基本上我想将三个数字加起来并在价格字段中返回该值     

解决方法

        将聚合函数
SUM()
GROUP BY
一起使用:
select ts.name as my_name,ss.step_number,p.specs,SUM(p.price),ssp.class_id
from optional_system_step  as ss
join system as s on s.system_id=ss.system_id
join category_description  as cd on cd.category_id=ss.category_id
join optional_system_step_product as  ssp on ss.system_step_id=ssp.system_step_id
join product as p on  p.product_id=ssp.product_id
join product_description as pd on  pd.product_id=p.product_id
join template_step as ts on  (ts.template_id=s.optional_template_id and ts.step_number=ss.step_number)
where s.system_id = \'15\' 
GROUP BY ts.name,p.spects,ssp.class_id
order by ss.step_number,ssp.class_id; 
    ,        求和还是与GROUP BY求和?     ,        如果您将1,2和3按class_id分组,则上面的内容实际上将返回3行。 我认为您需要的查询在下面,但它假定您可以按
ts.name
ss.step_number
p.specs
ssp.class_id
进行分组
SELECT
    ts.name AS my_name,SUM( p.price),ssp.class_id
FROM
    optional_system_step AS ss
    JOIN system AS s
    ON s.system_id = ss.system_id
    JOIN category_description AS cd
    ON cd.category_id = ss.category_id
    JOIN optional_system_step_product AS ssp
    ON ss.system_step_id = ssp.system_step_id
    JOIN product AS p
    ON p.product_id = ssp.product_id
    JOIN product_description AS pd
    ON pd.product_id = p.product_id
    JOIN template_step AS ts
    ON ( ts.template_id = s.optional_template_id
         AND ts.step_number = ss.step_number
       )
WHERE
    s.system_id = \'15\'
GROUP BY
ts.NAME,ssp.class_id
ORDER BY
    ss.step_number,ssp.class_id ;
    ,        查询的输出与SELECT中的列数不匹配,因此我不确定是否可能缺少任何内容。 但这应该可以解决您的目的:
select ts.name as my_name,SUM(p.price) as price,ssp.class_id 
from optional_system_step as ss 
join system as s on s.system_id=ss.system_id 
join category_description as cd on cd.category_id=ss.category_id 
join optional_system_step_product as ssp on ss.system_step_id=ssp.system_step_id 
join product as p on p.product_id=ssp.product_id 
join product_description as pd on pd.product_id=p.product_id 
join template_step as ts on (ts.template_id=s.optional_template_id and ts.step_number=ss.step_number)
where s.system_id = \'15\' 
GROUP BY ssp.class_id;
我还想补充一点,您不需要在其他列上使用GROUP BY,因为它们似乎都具有相同的值,因此在ssp.class_id上使用GROUP BY应该没问题。 另外,尽管与您的问题没有直接关系,但我认为,如果删除
category_description
product_description
连接,您的查询应该仍然可以正常工作,并且看起来也会更简洁。由于无法理解您的数据库结构,因此无法确认。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。