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

Zapytanie MySQL, aby policzyć elementy według tygodnia w bieżących 52 tygodniach?

Niektórym osobom nie podoba się to podejście, ale ja zwykle używam fikcyjnej tabeli zawierającej wartości od 0 do 1000, a następnie używam tabeli pochodnej, aby uzyskać potrzebne zakresy -

CREATE TABLE dummy (`num` INT NOT NULL);
INSERT INTO dummy VALUES (0), (1), (2), (3), (4), (5), .... (999), (1000);

Jeśli masz tabelę z automatycznie rosnącym identyfikatorem i dużą ilością wierszy, możesz ją z tego wygenerować -

CREATE TABLE `dummy`
SELECT id AS `num` FROM `some_table` WHERE `id` <= 1000;

Pamiętaj tylko, aby wstawić wartość 0.

SELECT CURRENT_DATE - INTERVAL num DAY
FROM dummy
WHERE num < 365

Tak więc stosując to podejście do zapytania, możesz zrobić coś takiego -

SELECT WEEK(calendar.datefield) AS `week`, IFNULL(SUM(purchaseyesno),0) AS item_sales
FROM items_purchased join items on items_purchased.item_id=items.item_id 
RIGHT JOIN (
    SELECT (CURRENT_DATE - INTERVAL num DAY) AS datefield
    FROM dummy
    WHERE num < 365
) AS calendar ON (DATE(items_purchased.purchase_date) = calendar.datefield)
WHERE calendar.datefield >= (CURRENT_DATE - INTERVAL 1 YEAR)
GROUP BY week(datefield) -- shouldn't this be datefield instead of date?


  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 zabezpieczyć pliki przed nieautoryzowanym pobieraniem

  2. Mysql:Odmowa dostępu dla użytkownika 'root'@'localhost' zaraz po instalacji na macOS

  3. MySQL Uzyskaj rangę z rankingów

  4. Błąd „Nie znaleziono odpowiedniego sterownika” podczas korzystania z bazy danych w usłudze sieci Web na serwerze Glassfish

  5. JSON_PRETTY() – Formatuj dokumenty JSON dla łatwiejszej czytelności w MySQL