1

У меня есть запрос, который на 90% там, я запрашиваю данные о том, что происходит в течение каждого дня недели, который отлично работает для данных, которые есть, но я бы также как данные для тех, которые не являются (я хочу, чтобы запрос включал нули в течение дней недели, которых не существует).postgres sql выбор по будням, включая пустые записи в рельсах

SELECT EXTRACT(dow FROM start_at) AS number, COUNT(*) FROM "events" GROUP BY number 

или для рельсов ...

Event.select("EXTRACT(dow FROM start_at) AS number, COUNT(*)").group("number") 

Результат.

+----+--------+-------+ 
| id | number | count | 
+----+--------+-------+ 
| | 0.0 | 16 | # day of the week Sunday 
| | 1.0 | 20 | 
| | 2.0 | 29 | 
| | 3.0 | 19 | 
| | 4.0 | 4  | 
+----+--------+-------+ 

Как я могу расширить этот запрос, чтобы наметить все дни недели, даже если нет записей? (чтобы выглядеть так).

+----+--------+-------+ 
| id | number | count | 
+----+--------+-------+ 
| | 0.0 | 16 | 
| | 1.0 | 20 | 
| | 2.0 | 29 | 
| | 3.0 | 19 | 
| | 4.0 | 4  | 
| | 5.0 | 0  | # i want these zeros too! 
| | 6.0 | 0  | 
+----+--------+-------+ 

ответ

0

Попробуйте это:

events = Event.select("EXTRACT(dow FROM start_at) AS number, COUNT(*)").group("number") 

counts = events.each_with_object({}) do |event, counts| 
    counts[event.number.to_i] = event.count 
end 

weekdays = (0..6).map do |day| 
    { 
    number: day, 
    count: counts[day] || 0 
    } 
end 

Это должно дать вам массив хэшей на каждый день с графом в этот день, даже если счетчик равен нулю. Я не могу полностью проверить это, потому что у меня нет вашей таблицы DB, но, надеюсь, она укажет вам в правильном направлении.

Смежные вопросы