Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Rails—基于多列对不同记录运行聚合查询_Sql_Ruby On Rails_Postgresql_Unique_Aggregate Functions - Fatal编程技术网

Sql Rails—基于多列对不同记录运行聚合查询

Sql Rails—基于多列对不同记录运行聚合查询,sql,ruby-on-rails,postgresql,unique,aggregate-functions,Sql,Ruby On Rails,Postgresql,Unique,Aggregate Functions,我有一张叫贝茨的桌子。我希望根据多列的不同值返回记录,然后对该记录集执行聚合查询。当然,这个查询不起作用,但应该说明我正在尝试做什么: Bet.select('distinct user_id, event_id, bet_line_id, state, pick'). select("user_id, COUNT(CASE WHEN state = 'won' then 1 ELSE null END) AS bets_won, COUNT(CASE WHEN state = 'lost'

我有一张叫贝茨的桌子。我希望根据多列的不同值返回记录,然后对该记录集执行聚合查询。当然,这个查询不起作用,但应该说明我正在尝试做什么:

Bet.select('distinct user_id, event_id, bet_line_id, state, pick').
select("user_id, COUNT(CASE WHEN state = 'won' then 1 ELSE null END) 
AS bets_won, COUNT(CASE WHEN state = 'lost' then 1 ELSE null END) 
AS bets_lost, COUNT(CASE WHEN state = 'pushed' then 1 ELSE null END) 
AS bets_pushed").group('user_id')
如果不清楚我在问什么,我将提供一个更具说明性的例子


使用Rails 3.2和postgres,顺便说一句。

我肯定还有其他方法,但我会用一个通用的表表达式来解决这个问题。您可以手工编写SQL,也可以查看postgres_ext gem:

Thx中的链接。我宁愿避免添加另一个gem,除非没有令人满意的sql等价物。用普通sql很容易做到。该链接显示了一个您需要的原始SQL示例。我刚刚注意到在我写了上述注释后生成的普通SQL。我会试一试的!