sql >> Databáze >  >> RDS >> Mysql

Jak získat hodnoty pro každý den v měsíci

To je v SQL skutečně překvapivě obtížné. Jedním ze způsobů, jak to udělat, je mít dlouhý příkaz select s UNION ALL pro generování čísel od 1 do 31. To demonstruje princip, ale kvůli jasnosti jsem se zastavil u 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

K uložení těchto hodnot může být lepší použít tabulku a místo toho se k ní připojit.

Výsledek:

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


  1. PostgreSQL index se nepoužívá pro dotaz na rozsahy IP

  2. Před vložením zkontrolujte, zda řádek v databázi existuje

  3. Seřadí se 'Select' vždy podle primárního klíče?

  4. Jak propojit Android Studio s databází SQL Server?