Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да получите стойности за всеки ден от един месец

Това всъщност е изненадващо трудно да се направи в SQL. Един от начините да го направите е да имате дълъг оператор select с UNION ALL, за да генерирате числата от 1 до 31. Това демонстрира принципа, но спрях на 4 за яснота:

SELECT MonthDate.Date, COALESCE(SUM(`values`), 0) AS Total
FROM (
    SELECT 1 AS Date UNION ALL
    SELECT 2 UNION ALL
    SELECT 3 UNION ALL
    SELECT 4 UNION ALL
    --
    SELECT 28 UNION ALL
    SELECT 29 UNION ALL
    SELECT 30 UNION ALL
    SELECT 31) AS MonthDate
LEFT JOIN Table1 AS T1
ON MonthDate.Date = DAY(T1.Date)
AND MONTH(T1.Date) = 1 AND YEAR(T1.Date) = 2010
WHERE MonthDate.Date <= DAY(LAST_DAY('2010-01-01'))
GROUP BY MonthDate.Date

Може да е по-добре да използвате таблица за съхраняване на тези стойности и вместо това да се присъедините към нея.

Резултат:

1, 34
2, 10
3, 0
4, 7


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Уместност на пълнотекстово търсене на Mysql в множество таблици

  2. Как да изчислим ранга в MySQL

  3. Добавете външен ключ към съществуваща таблица

  4. как мога да експортирам mysql база данни с помощта на ssh?

  5. Мога ли да използвам неагрегирани колони с групиране по?