按ActiveRecord中的星期几进行分组,订购和计数

时间:2017-10-23 15:20:46

标签: mysql ruby-on-rails activerecord

我有一个包含timeslot列(日期时间类型)的表。我想发出一个查询并让它返回如下数据:

Sunday | 24
Monday | 32
Tuesday | 12
Wednesday | 93
Thursday | 22
Friday | 66
Saturday | 25

基本上,按照第一列中的星期几(星期日 - >星期一)和第二列中的count(*)行排序。

到目前为止,我有一个类似的查询:

order_query = "CASE
    WHEN DAYNAME(CONVERT_TZ(timeslot,'UTC','America/Toronto')) = 'Sunday' THEN 1
    WHEN DAYNAME(CONVERT_TZ(timeslot,'UTC','America/Toronto')) = 'Monday' THEN 2
    WHEN DAYNAME(CONVERT_TZ(timeslot,'UTC','America/Toronto')) = 'Tuesday' THEN 3
    WHEN DAYNAME(CONVERT_TZ(timeslot,'UTC','America/Toronto')) = 'Wednesday' THEN 4
    WHEN DAYNAME(CONVERT_TZ(timeslot,'UTC','America/Toronto')) = 'Thursday' THEN 5
    WHEN DAYNAME(CONVERT_TZ(timeslot,'UTC','America/Toronto')) = 'Friday' THEN 6
    WHEN DAYNAME(CONVERT_TZ(timeslot,'UTC','America/Toronto')) = 'Saturday' THEN 7
END"

week = ProfessionalAvailability.where.not(appointment_id: nil).group('DAYNAME(CONVERT_TZ(timeslot,"UTC","America/Toronto"))').order(order_query).count

哪个适合我的情况。但是,正如您所看到的,order_query是一个相当长的字符串,我想知道是否有一个简单的ActiveRecord方式来执行此操作。

我的数据库在MySQL中。

非常感谢〜

1 个答案:

答案 0 :(得分:0)

group_date为例,了解如果您想自己构建SQL查询,或者只是为您自己构建SQL查询,这是如何实现的。