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

връща нули за дати, които не съществуват MYSQL GROUP BY

Обикновено постигате този тип неща чрез JOIN-ing с таблица със стойности , т.е. таблица, която съдържа всички стойности, които ви интересуват.

Типичните таблици със стойности могат да съдържат например всички цели числа между 0 и 1000 или всички дати за даден период. Често таблиците със стойности включват повече стойности от желаните и ние получаваме точния желан резултат чрез добавяне на филтри в клаузата WHERE.

В този случай ще ви е необходима такава таблица, която съдържа дати. Ако приемем, че тази таблица е наречена ValTableDates и че съдържа всички дати между януари 2005 г. и декември 2010 г., заявката ще изглежда така:

SELECT AVG(data) AS data, VT.ValDate
FROM ValTableDates VT
LEFT JOIN  table T ON T.dateReg = VT.ValDate
WHERE VT.ValDate > [Some Start Date] and VT < [Some End Date]
GROUP BY YEAR(dateReg), MONTH(dateReg), DAY(dateReg) 
ORDER BY dateReg

Горната заявка може да изисква малко коригиране, за да получите стойност нула, а не NULL, но основната точка е, че таблицата със стойности обикновено е най-простият начин за предоставяне на изходни записи за липсващи точки от данни.
Алтернатива е да използвате функция/израз, който произвежда желаната последователност [дата], вътре в подзаявка, но това обикновено е по-малко ефективно и по-податливо на грешки.




  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 репликация чрез SSH тунел

  3. Как да запазим UTF8mb4 данни с mysqldump?

  4. PMA-SQL-ГРЕШКА при импортиране на база данни

  5. MySQL брои последователни дати за текущата поредица