经过两天的搜索和尝试类似的问题,我已经到了需要提问的地步了!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
查询的输出对帮助不大。发布您期望**的输入数据和输出。 –