gpt4 book ai didi

mysql - 对具有相同列值的值进行分组/求和

转载 作者:行者123 更新时间:2023-11-29 02:49:38 32 4
gpt4 key购买 nike

我试图解决一个看起来像下面编写的代码的问题,但由于缺乏知识和阅读 sqlalchemy 文档,我还没有真正找到解决问题的方法。

目标: 如果 year_column 中的年份相同,则获取 sales_in_usd 的总和

到目前为止,我得到的是通过使用以下查询调试和阅读 stackoverflow 和文档,谷歌:

session.query(fact_corporate_sales, Company, Sales,
Time, Sector, func.sum(Sales.sales_in_usd).label('summary')).\
join(Sales).\
join(Time).\
join(Company).\
join(Segment).\
order_by(Time.year.desc()).\
filter(Company.company_name.like(filtered)).\
group_by(fact_corporate_sales.fact_cps_id, Company.company_name,fact_corporate_sales.cps_id).\
all()

而且 fact_cps_id 在 fact_table 和同一个表存储中是唯一的,维度表的键也是如此..

我有一个事实表,它存储来自 4 个维度表的 4 个外键。

fact_cps_id   company_id   sales_id   time_id  sector_id
1 4 2 1 2
2 4 1 1 3
3 4 3 2 1
4 4 2 2 4
5 4 4 3 2
6 4 99 1 1

dim_company

company_id  company_name
1 Nike
2 Adidas
3 Puma
4 Reebok

dim_segment

segment_id  segment_nom
1 basketball
2 running
3 soccer
4 watersports

昏暗时间

time_id  quarter year
1 1 2013
2 2 2013
3 1 2014
4 3 2014

dim_sales

sales_id    sales_in_euro
1 2000
2 3200
3 1400
4 1590
.. ..
99 1931

基本上,正如您在表格和查询中看到的那样,我试图做的是总结同年 dim_Time.year <- 示例中的所有销售额。

如果我们查看 fact_table 我们可以看到,这里有 3 次 time_id = 1。因此,可以汇总这些值并显示为摘要。

我从标准 SQL 知道可以使用 group by 和聚合函数 sum。

我的结果(time_id 只是为了帮助,因此没有输出):

13132.0 <- time_id = 1
21201.0 <- time_id = 2
23923.0 <- time_id = 1
31232.0 <- time_id = 99
32021.0 <- time_id = 2
32342.0 <- time_id = 1
131231.0 <- time_id = 4

我将实际查询打印到控制台并得到这个[必须删除 .all(),因为“list”没有名为“statement”的属性]:

SELECT fact_corporate_sales.cps_fact_id, fact_corporate_sales.cps_id, 

fact_corporate_sales.company_id, fact_corporate_sales.time_id, fact_corporate_sales.segment_id, sum(dim_corporate_sales.sales_in_usd) AS summary
FROM fact_corporate_sales INNER JOIN dim_corporate_sales ON dim_corporate_sales.cps_id = fact_corporate_sales.cps_id INNER JOIN dim_time ON dim_time.time_id = fact_corporate_sales.time_id INNER JOIN dim_company ON dim_company.company_id = fact_corporate_sales.company_id INNER JOIN dim_segment ON dim_segment.segment_id = fact_corporate_sales.segment_id
WHERE dim_company.company_name LIKE %s GROUP BY fact_corporate_sales.cps_fact_id ORDER BY dim_time.year DESC

如果我想分组,例如 dim_time.Year only..我从 mysql 或控制台得到以下响应

Error Code: 1055. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db.fact_corporate_sales.fact_cps_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

最佳答案

解决方案是只执行以下sql:

engine.execute("SET sql_mode='';")

因为我失败的查询的响应是:

"this is incompatible with sql_mode=only_full_group_by"

我不得不禁用 sql_mode,我也这样做并得到了我的结果。

关于mysql - 对具有相同列值的值进行分组/求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37563804/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com