我搜索了很多,但大多数解决方案都是针对连接选项而不是我真正想要的。
我有一个名为X
的表(在Postgres数据库中):
anm_id anm_category anm_sales
1 a_dog 100
2 b_dog 50
3 c_dog 60
4 a_cat 70
5 b_cat 80
6 c_cat 40
我希望通过分组' a_dog',' b_dog',' c_dog'来获得总销售额。作为狗和' a_cat',' b_cat',' c_cat'像猫一样。
我无法更改表格中的数据,因为它是一个外部数据库,我只能从中获取信息。
如何使用SQL查询执行此操作?它不需要特定于Postgres。
答案 0 :(得分:2)
使用case
语句将相同类别的动物分组在一起
SELECT CASE
WHEN anm_category LIKE '%dog' THEN 'Dogs'
WHEN anm_category LIKE '%cat' THEN 'cats'
ELSE 'Others'
END AS Animals_category,
Sum(anm_sales) AS total_sales
FROM yourtables
GROUP BY CASE
WHEN anm_category LIKE '%dog' THEN 'Dogs'
WHEN anm_category LIKE '%cat' THEN 'cats'
ELSE 'Others'
END
此查询也适用于大多数数据库。
答案 1 :(得分:1)
使用 PostgreSQL split_part()
select animal||'s' animal_cat,count(*) total_sales,sum(anm_sales) sales_sum from(
select split_part(anm_cat,'_',2) animal,anm_sales from x
)t
group by animal
在 MySQL
中创建split_str()select animal||'s' animal_cat,count(*) total_sales,sum(anm_sales) sales_sum from(
select split_str(anm_cat,'_',2) animal,anm_sales from x
)t
group by animal
答案 2 :(得分:0)
您可以Document.insertString(...)
Document
分组:
substr
答案 3 :(得分:0)
如果你有一个恒定长度的附录,如例:
SELECT CASE right(anm_category, 3) AS animal_type -- 3 last char
, sum(anm_sales) AS total_sales
FROM x
GROUP BY 1;
您根本不需要CASE
声明,但如果使用的话,请将其设为“简单”CASE
:
使用位置参考而不是重复可能冗长的表达式。
如果长度不同,但示例中总是有一个下划线:
SELECT split_part(anm_category, '_', 2) AS animal_type -- word after "_"
, sum(anm_sales) AS total_sales
FROM x
GROUP BY 1;