Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zapytanie MySQL do grupowania danych w różne zakresy

Musisz zbudować tabelę inline zawierającą wszystkie przedziały cenowe. Następnie wykonaj LEFT JOIN z tabelą pochodną opartą na zapytaniu, aby uzyskać oczekiwany wynik:

SELECT x.PriceRange, COALESCE(TotalWithinRange, 0) AS TotalWithinRange
FROM (
  SELECT "0 - 10" AS PriceRange 
  UNION SELECT "10 - 20"
  UNION SELECT "20 - 30"
  UNION SELECT "30 - 40"
  UNION SELECT "40 - 50"
  UNION SELECT "over 50" ) x
LEFT JOIN (  
   SELECT
      CASE when price >= 0 and price <= 10 then "0 - 10"
           when price > 10 and price <= 20 then "10 - 20"
           when price > 20 and price <= 30 then "20 - 30"
           when price > 30 and price <= 40 then "30 - 40"
           when price > 40 and price <= 50 then "40 - 50"
           else "over 50"
      END AS PriceRange,
      COUNT(*) as TotalWithinRange
   FROM YourTable
   GROUP BY 1 ) y ON x.PriceRange = y.PriceRange

Pokaz SQL Fiddle



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać komentarze do kolumn z SQL

  2. PHP:koncepcja systemu oceny gwiazdek?

  3. tworzenie listy znajomych w mysql

  4. Próbuję wykonać LOAD DATA INFILE za pomocą REPLACE i AUTO_INCREMENT

  5. MySQLdb Pythona nie może znaleźć libmysqlclient.dylib z Homebrewed MySQL