mysql 一对多 count_MySQL COUNT的一对多总和

经过两天的搜索和尝试类似的问题,我已经到了需要提问的地步了!MySQL COUNT的一对多总和

我有以下的数据库结构(简化的)..

mt_product | mt_sku | mt_price

========== | ====== | ========

id | brand_id | mpn | id | product_id | retailer_id | sku | id | sku_id | price | date

例如...

*可口可乐的罐是一个产品。

*它可以出售在许多不同的零售商,谁都会有一个SKU。

*此SKU的价格可能会每天更改。

我想列出产品的总价格数量。

要列出这个目前我有以下查询,几乎工程...

SELECT

p.id AS pid, p.title AS p_title, p.cat, p.mpn,

b.id AS bid, b.name AS brand,

(SELECT COUNT(s.id) FROM mt_sku AS s WHERE s.pid = p.id) AS num_sku,

(SELECT COUNT(gbp.id) FROM mt_price AS gbp INNER JOIN mt_sku ON mt_sku.id = gbp.sid) AS num_price

FROM mt_product AS p

INNER JOIN mt_brand b ON p.bid = b.id

INNER JOIN mt_sku s ON p.id = s.pid

num_sku回报不如预期,但是当我介绍了num_price第二子查询(我已经修改了很多次),我不是得到...

*没有pid的重复,但num_price是价格的总数,以SKU为单位,而不是此product_id的价格数量(如上面的查询)

eg1_img * num_price的正确数量,而不是合计num_price,pid在表中被复制(如下面的查询) - 因此,当pid被复制时,这不会给我结果我想要。我添加了DISTINCT,因为它帮助查询的早期版本,现在没有区别。 eg2_img

SELECT

DISTINCT(p.id) AS pid, p.title AS p_title, p.cat, p.mpn,

b.id AS bid, b.name AS brand,

(SELECT COUNT(s.id) FROM mt_sku AS s WHERE s.pid = p.id) AS num_sku,

(SELECT COUNT(gbp.id) FROM mt_price AS gbp WHERE s.id = gbp.sid) AS num_price

FROM mt_product AS p

INNER JOIN mt_brand b ON p.bid = b.id

INNER JOIN mt_sku s ON p.id = s.pid

我敢肯定的关键,这是

产品可以有多个SKU,其中的SKU有多个价格的历史。

对架构的任何帮助或想法都会非常棒。

+0

添加一个简短示例,其中包含每个表中的2-3行以及查询的预期结果;它会帮助我们理解你的问题。 –

+0

谢谢... 第一个查询给出了这样的 - [链接](http://mrflibble.xyz/img/qry_eg2.PNG) 第二个查询给出了这样的 - [链接](http://mrflibble.xyz /img/qry_eg3.PNG) –

+0

查询的输出对帮助不大。发布您期望**的输入数据和输出。 –

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值