sql – 按年份分组,月份,然后在ActiveRecord中计数3
发布时间:2020-05-23 06:37:21 所属栏目:MsSql 来源:互联网
导读:我试图拉一个一个月和一个月创建的所有用户的数量,但以下似乎没有按预期工作. User.group(YEAR(created_AT), MONTH(created_at)). count(DISTINCT(id), YEAR(created_at), MONTH(created_at)) 我正在寻找类似的东西 {2011 = {1 = 222, 2 = 333, 4 = 4
|
我试图拉一个一个月和一个月创建的所有用户的数量,但以下似乎没有按预期工作. User.group("YEAR(created_AT),MONTH(created_at)").
count("DISTINCT(id),YEAR(created_at),MONTH(created_at)")
我正在寻找类似的东西 {2011 => {1 => 222,2 => 333,4 => 444,5 => 667 ... }}
但我得到了 {1 => 222,5 => 667 ... }
我是否缺少某些东西,还是ActiveRecord不能在一个查询中给我这个结果? 解决方法count方法不像你想的那样工作.你最终这样做:
select count(distinct(id),year(created_at),month(created_at)) from users group by year(created_at),month(created_at) 那个SELECT子句是非常狡猾的,但MySQL会以通常的方式让它通过.我想你想要这个查询: select count(distinct(id)),month(created_at) from users group by year(created_at),month(created_at) 我可能直接去select_all这样: a = User.connection.select_all(%q{
select count(distinct(id)) as c,year(created_at) as y,month(created_at) as m
from users
group by y,m
})
或者你可以这样做: a = User.connection.select_all(
User.select('count(distinct(id)) as c,month(created_at) as m').
group('y,m')
)
那些会给你一个数组,一个哈希,c,y和m键这样: a = [
{ 'c' => '23','y' => '2010','m' => '11' },{ 'c' => '1','y' => '2011','m' => '1' },{ 'c' => '5','m' => '3' },{ 'c' => '2','m' => '4' },{ 'c' => '11','m' => '8' }
]
那么你完成这项工作就需要一些数据争吵: h = a.group_by { |x| x['y'] }.each_with_object({}) do |(y,v),h|
h[y.to_i] = Hash[v.map { |e| [e['m'].to_i,e['c'].to_i] }]
end
# {2010 => {11 => 23},2011 => {1 => 1,3 => 5,4 => 2,8 => 11}} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 查询返回MS SQL Server列出的所有系统存储过程
- sql-server – 不能模式绑定视图MyName’,因为名称MyTable对
- sql – 创建db表NULL最佳实践
- SQLserver2000 企业版 出现进程51发生了严重的异常错误的处
- sql-server – 我们可以在WAN上访问Microsoft SQL Server数
- sql-server-2008 – 如何在SQL Server中获取具有复合主键的
- sql-server – ALLOW_SNAPSHOT_ISOLATION和READ_COMMITTED_
- 数据库 – 两个外键而不是主键
- sql – 如何打开.mdf和.ldf文件?
- sql-server – 表中列的顺序是否重要?
