我一直在碰到这个问题,我知道必须有一个简单的解决方案,但我无法找到它。
我想要计算某些日期之间每个部分的连续出版物的数量。因此,没有日期选择,它看起来像这样。
SELECT
Part_Name,
COUNT(DISTINCT Serial_No) AS 'Serial Frequency'
FROM Inventory
GROUP BY Part_Name
我得到每个部分的连续剧数。
part1 55
part2 32
part3 48
etc etc
所以现在我希望在两个日期之间选择它。我知道我需要使用Have但是这迫使我将它添加到分组中,然后它不再给我计数总数但每个部分单独。 I.E.
SELECT
Part_Name,
COUNT(DISTINCT Serial_No) AS 'Serial Frequency'
FROM Inventory
GROUP BY Part_Name, Grade_Date
HAVING Grade_Date > '2016-06-01' AND Grade_Date < '2016-07-01'
输出:
part1 1
part1 1
part1 1
part2 1
part2 1
etc etc
我在这里错过了什么明显的事情,因为这可以做到这一点?如果我不包含它,我会收到此错误
专栏&#39; Inventory.Grade_Date&#39;在HAVING子句中无效,因为它不包含在聚合函数或GROUP BY子句中。
答案 0 :(得分:1)
使用where
子句,因为您要比较实际值而不是聚合值。
SELECT
Part_Name,
Grade_Date,
COUNT(DISTINCT Serial_No) AS 'Serial Frequency'
FROM Inventory
WHERE Grade_Date > '2016-06-01' AND Grade_Date < '2016-07-01'
GROUP BY Part_Name,Grade_Date
答案 1 :(得分:0)
您希望在进行聚合之前按 评论:Grade_Date
进行过滤,并且不应在Grade_Date
或GROUP BY
中包含SELECT
:< / p>
SELECT Part_Name, COUNT(DISTINCT Serial_No) AS SerialFrequency
FROM Inventory
WHERE Grade_Date > '2016-06-01' AND Grade_Date < '2016-07-01'
GROUP BY Part_Name;
>=
。DISTINCT
,请将其删除。 DISTINCT
会产生额外的计算开销。