我在使用似乎进行简单查询时遇到了问题。我试图通过ProductID
计算和分组来获得整个产品销售的次数。我已经在线研究了它,我去的每个地方都只添加一个简单的COUNT
,但是当我这样做时,它仍会输出相同数量的行。
因此,如果我不使用COUNT
(例如),则会输出1,000行,如果我使用COUNT
,则输出1,000行并且不会给我正确的行时间卖了。它们都列为" 1"而不是被分组和计算。我猜测它与我的联接有关,但我无法弄明白。
以下是我在使用COUNT后看到的一个示例(我删除了品牌和date_added只是为了让它更容易阅读)。 ProductID不止一次显示,即使它们应该组合在一起并计算在内。
times_sold | ProductID | title
---------- | --------- | ---------
1 | 17998 | title 2
1 | 13670 | title 3
1 | 17956 | title 4
1 | 4569 | title 5
1 | 12598 | title 1
1 | 12598 | title 1
1 | 17998 | title 2
以下是我正在运行的查询:
SELECT TOP (100) PERCENT
COUNT(s.ProductID) AS times_sold,
s.ProductID, p.title, p.brandname, p.date_added
FROM
dbo.TBL_OrderSummary AS s
INNER JOIN
dbo.jewelry AS p ON s.ProductID = p.ProductID
INNER JOIN
dbo.sent_items AS i ON s.InvoiceID = i.ID
GROUP BY
s.ProductID, p.title, p.brandname, p.flare_type, p.date_added,
i.date_order_placed, i.ship_code, p.jewelry
HAVING
(p.title LIKE '%stone%')
AND (i.date_order_placed > CONVERT(DATETIME, '2016-01-01 00:00:00', 102))
AND (i.ship_code = N'paid')
AND (p.flare_type = 'Single flare')
AND (p.jewelry LIKE '%plugs%')
感谢您的帮助!
答案 0 :(得分:2)
他们看起来不正确的原因是因为行中的记录不一致。如果你有一个产品名称Widget 2,年份是2015年,你有另一个产品名称小部件和年份2016年,每个产品旁边只计算1,因为整行只出现一次。您需要限制您的小组以获得准确的计数。
GROUP BY s.productID, p.title, COUNT(s.productID)
这应该给你一个准确的计数。您只是将您的组限制为过大的样本以获取任何唯一记录。您必须减少选择中的内容才能使用,您需要在选择中使用s.Product和p.title来匹配组。希望这会有所帮助。
答案 1 :(得分:0)
除非您使用汇总功能(即。HAVING COUNT(s.ProductID) > 2
)进行过滤,否则您可以将所有选择条件移至WHERE
行。
所以你可以试试:
select count(s.ProductID) times_sold, s.ProductID, p.title
from dbo.TBL_OrderSummary s inner join dbo.jewelry p on s.ProductID = p.ProductID
inner join dbo.sent_items i on s.InvoiceID = i.ID
where p.title like '%stone%'
and i.date_order_placed > CONVERT(DATETIME, '2016-01-01 00:00:00', 102)
and i.ship_code = N'paid'
and p.flare_type = 'Single flare'
and p.jewelry like '%plugs%'
group by s.ProductID, p.title