2013-03-05 91 views
-1

我有一个变量,需要按月显示它。这个变量是一个布尔值,如果它设置为True,这意味着该应用程序已安装。如何在SQL中添加变量

示例: 变量=龙头安装的应用程序

在一月有20个安装的应用。 二月份有10个安装的应用程序。 3月份有5个安装的应用程序。

我要显示在桌子上安装的(布尔=真)的所有应用程序:

January: 20 

February: 20 (January) + 10 = 30 

March: 20 (January) + 10 (February) + 5 (March) = 35 

有谁知道我怎么能在MySQL做到这一点?

感谢

+1

显示你的努力,请张贴你试过的一些sql。 – 2013-03-05 19:29:00

+0

请提供一些继续。像表结构和任何你尝试过的SQL。 – Randy 2013-03-05 19:33:03

回答

0

我知道了!我用递归

SELECT (select id_time from database.dim_time where id_time = a.fk_time) AS yearmonth, (select sum(if(installed in (1), 1,0)) as installed from database.facts_table where fk_time <= yearmonth) as installed FROM database.facts_table AS a GROUP BY yearmonth ORDER BY yearmonth ASC

0

如果我理解正确的,它只是通过一个命令一个简单的查询。

select COLUMNS_YOU_WANT from TABLE_NAME 
where YOUR_BOOLEAN == True 
order by SOME_DATE_COLUMN 

希望你已经足够精通SQL,用你所需要的部分替换这些部分。

+0

这不是关于排序行。我想要安装一些aps。就像安装的发展一样。 – user2137198 2013-03-05 19:34:56

+0

好的,这在第一篇文章中根本就不清楚。只需获得每月的总和,然后在PHP/Python端添加。你是手动还是编程查询数据库?不要让SQL做比它需要的更多的事情。 PHP/Python中的滚动操作非常简单。 – JustinDanielson 2013-03-05 19:37:23

1

您可以使用子查询按月分组安装。然后,你可以在我们的外部查询一个变量来计算累积总和:

select installation_year 
,  installation_month 
,  installation_count 
,  (@running_sum:= @running_sum + installation_count) as cumulative_sum 
from (
     select year(installation_date) as installation_year 
     ,  month(installation_date) as installation_month 
     ,  count(*) as installation_count 
     from YourTable 
     group by 
       installation_year 
     ,  installation_month 
     ) as SubQueryAlias 
join (select @running_sum := 0) as InitVars 
order by 
     installation_year 
,  installation_month 

Example at SQL Fiddle.

0

我假设你有一个包含“已安装”栏和“一个“应用程序”表InstalledDate“列。如果是这样的......

SELECT Count(*) 
FROM Applications 
WHERE Installed = 1 -- Assumes a bit/boolean column. 
AND InstalledDate BETWEEN @StartDate AND @EndDate; 

斯科特

+0

我懂了!我用递归: – user2137198 2013-03-08 20:26:06

+0

SELECT AS yearmonth, (SELECT SUM(如果(安装在(从database.dim_time其中id_time = a.fk_time选择id_time)(1),1,0)),如从数据库安装 .facts_table 其中fk_time <= yearmonth )作为安装, FROM database.facts_table AS一个 GROUP BY yearmonth ORDER BY yearmonth ASC; – user2137198 2013-03-08 20:34:42

1

类似:

Select COUNT(*),Month 
From Apps 
where installed = true 
group by Month 
+0

这会如何将一月份的安装次数与​​二月份的安装次数相加? – Andomar 2013-03-05 19:38:49

+0

只要做到这一点,然后总结出你想用任何语言来查询数据库的特定范围。 – JustinDanielson 2013-03-05 19:39:00