sql >> Databasteknik >  >> RDS >> Mysql

Gruppera efter ska returnera 0 vid gruppering efter timmar. Hur gor man det har?

Du behöver en tabell som innehåller 24 timmar, sedan JOIN till det. Om du inte kan skapa en tabell kan du skapa den i din fråga. Se den här demon .

SELECT a.hr, IFNULL(b.hourCount, 0) hourCount
FROM 
  (SELECT 1 AS hr
  UNION ALL
  SELECT 2
  UNION ALL
  SELECT 3
  UNION ALL
  SELECT 4
  UNION ALL
  SELECT 5
  UNION ALL
  SELECT 6
  UNION ALL
  SELECT 7
  UNION ALL
  SELECT 8
  UNION ALL
  SELECT 9
  UNION ALL
  SELECT 10
  UNION ALL
  SELECT 11
  UNION ALL
  SELECT 12
  UNION ALL
  SELECT 13
  UNION ALL
  SELECT 14
  UNION ALL
  SELECT 15
  UNION ALL
  SELECT 16
  UNION ALL
  SELECT 17
  UNION ALL
  SELECT 18
  UNION ALL
  SELECT 19
  UNION ALL
  SELECT 20
  UNION ALL
  SELECT 21
  UNION ALL
  SELECT 22
  UNION ALL
  SELECT 23
  UNION ALL
  SELECT 0) a
LEFT JOIN
  (SELECT COUNT(id) AS hourCount, HOUR(date) AS hr
   FROM `testing`
   GROUP BY HOUR(date)) b ON b.hr = a.hr


  1. Använder php för att returnera GROUP_CONCAT('kolumn x') värden

  2. Lokal replika av RDS-databas

  3. Svarsinnehållet måste vara en sträng eller ett objekt som implementerar __toString(), boolean ges efter flytten till psql

  4. pgbackups på Heroku hittades inte