我有两个相似的查询:
StoreQuery.group(:location).count(:name)
VS
StoreQuery.group(:location).select('DISTINCT COUNT(name)')
我期待结果完全相同,但他们并非如此。这两者有什么区别?
答案 0 :(得分:1)
不同之处在于第一个查询计算所有名称,第二个查询计算唯一名称,忽略重复。如果您列出的名称不止一次,他们将返回不同的数字。
答案 1 :(得分:0)
使用此示例数据
id | name | location |
---+------+----------+
1 | NULL | US
2 | A | UK
3 | A | UK
4 | B | AUS
让我们检查生成的查询结果
第一次查询
StoreQuery.group(:location).count(:name)
生成的查询:
SELECT location, COUNT(name) AS count FROM store_queries GROUP BY location
结果:
{US => 0, UK => 2, AUS => 1}
第二次查询
StoreQuery.group(:location).select('DISTINCT COUNT(name)')
生成的查询:
SELECT DISTINCT COUNT(name) FROM store_queries GROUP BY location
结果:
ActiveRecord::Relation [StoreQuery count: 0, StoreQuery count: 1, StoreQuery count: 1]
# Mean {US => 0, UK => 1, AUS => 1}
所以差异将是:
|1st query | 2nd query |
|----------+-----------+
# returned fields| 2 | 1 |
distinction | no | yes |
顺便说一下,rails支持这个:
StoreQuery.group(:location).count(:name, distinct: true)