MySQL:如果行不存在则返回0

时间:2010-08-01 10:55:23

标签: mysql row

我一直在讨论这个问题,所以现在我在这里:)我是一个SQL初学者,所以也许这对你们来说很容易......

我有这个问题:

SELECT COUNT(*) AS counter, recur,subscribe_date  
FROM paypal_subscriptions  
WHERE recur='monthly' and subscribe_date > "2010-07-16" and subscribe_date < "2010-07-23"  
GROUP BY subscribe_date  
ORDER BY subscribe_date  

现在我上面显示的日期是硬编码的,我的应用程序将提供可变的日期范围。

现在我得到一个结果表,其中有该日期的值。

counter |recur | subscribe_date   
2    |    Monthly | 2010-07-18  
3    |    Monthly | 2010-07-19  
4    |    Monthly | 2010-07-20    
6    |    Monthly | 2010-07-22

如果日期不存在,我想在柜台栏中返回。

counter |recur | subscribe_date   
0    |    Monthly | 2010-07-16  
0    |    Monthly | 2010-07-17  
2    |    Monthly | 2010-07-18  
3    |    Monthly | 2010-07-19  
4    |    Monthly | 2010-07-20    
0    |    Monthly | 2010-07-21  
6    |    Monthly | 2010-07-22  
0    |    Monthly | 2010-07-23 

这可能吗?

3 个答案:

答案 0 :(得分:0)

您需要一张日期表才能分组。这在使用CTE的MSSQL中非常容易this - 我不确定MySQL是否有类似的东西? 否则,您将需要创建一个硬表作为一次性练习

编辑:试一试:

SELECT COUNT(pp.subscribe_date) AS counter, dl.date, MIN(pp.recur)
FROM date_lookup dl 
    LEFT OUTER JOIN paypal pp 
    on (pp.subscribe_date = dl.date AND pp.recur ='monthly') 
WHERE dl.date >= '2010-07-16' and dl.date <= '2010-07-23'
GROUP BY dl.date
ORDER BY dl.date
  • 需要将查询主题更改为date_lookup表 (左外连接的顺序变得很重要)
  • Count(*)不起作用,因为'date'记录总是存在 - 需要在PayPay表中计算一些东西
  • pp.recur ='monthly'现在是一个连接条件,而不是因为LOJ的过滤器

最后,在选择列表中显示pp.recur不起作用。

我使用了聚合,但如果没有PayPal记录,则MIN(pp.recur)将返回null

参数化查询时可以执行的操作是重复重复类型过滤器吗? 再次,PLZ原谅MSSQL语法

SELECT COUNT(pp.subscribe_date) AS counter, dl.date, @ppRecur
FROM date_lookup dl 
    LEFT OUTER JOIN paypal pp 
    on (pp.subscribe_date = dl.date AND pp.recur =@ppRecur) 
WHERE dl.date >= @DateFrom and dl.date <= @DateTo
GROUP BY dl.date
ORDER BY dl.date

答案 1 :(得分:0)

您需要一个日期表(添加新表),然后您必须在该表和查询之间进行外部联接。

这个问题也与另一个问题类似。答案可能非常相似。

Insert Dates in the return from a query where there is none

答案 2 :(得分:0)

由于没有简单的方法可以做到这一点,我必须让应用程序为我填空,而不是让数据库返回我想要的数据。我确实因此而受到了性能影响,但有必要完成报告。

我一定会考虑在不久的将来从数据库中返回我想要的内容。我会试试nonnb的解决方案。

谢谢大家!