【问题标题】:SUM() returns wrong values when using left join with GROUP_CONCAT将左连接与 GROUP_CONCAT 一起使用时,SUM() 返回错误值
【发布时间】:2016-02-14 15:43:24
【问题描述】:

我有 3 个表,分别称为商店、服务和评级。

商店有

服务为商店提供不止一种服务

Rating 有店铺的评分

我需要在单个查询中获取带有服务和评分的商店详细信息。

我已经完成了这个查询

select shops.*, count(distinct rating.id) as rating_count, 
sum(rating.rating) as total_rating,
GROUP_CONCAT(distinct services.servicename SEPARATOR " <=> ") as servicename
from shops
LEFT JOIN rating on rating.shop_id = shops.id
LEFT JOIN services on services.shop_id = shops.id
group by shops.id

返回

但 shop1 的总评分为 21。但它显示为 42。

我需要正确的总评分以及该商店的所有服务。

检查这个fiddle

【问题讨论】:

标签: mysql sql


【解决方案1】:
select q1.id, q1.shopname, q1.rating_count, q1.total_rating,
GROUP_CONCAT(distinct services.servicename SEPARATOR " <=> ") as servicenamefrom
FROM
(select shops.*, count(distinct rating.id) as rating_count, 
sum(rating.rating) as total_rating
from shops
LEFT JOIN rating on rating.shop_id = shops.id
group by shops.id) q1
LEFT JOIN services on services.shop_id = q1.id
GROUP BY q1.id,  q1.shopname, q1.rating_count, q1.total_rating

http://sqlfiddle.com/#!9/ece82/20

要了解您的问题,请运行 select w/o group by 并检查您在连接之后但聚合之前获得的行。您将释放重复计算的来源。

【讨论】:

  • 没有 group by 返回单行,total_rating 46 和所有三个服务
  • 我认为您的查询工作正常。但对我来说有点复杂。我需要在 codeigniter 中做这个查询
  • 这就是我所说的没有分组的意思:sqlfiddle.com/#!9/ece82/24 我不明白你说的查询很复杂是什么意思。你想要它简单还是想要它计算你需要的东西?您可以将其拆分为 2 个简单的查询,每个查询都有一个左外连接。
  • 我的意思是在 codeigniter 中执行此查询并不复杂。谢谢。我会尝试做这个 CI
猜你喜欢
  • 2015-02-10
  • 2013-08-25
  • 1970-01-01
  • 2015-11-17
  • 2017-01-15
  • 2014-10-08
  • 2019-02-26
  • 1970-01-01
  • 2017-11-28
相关资源
最近更新 更多