Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tạo truy vấn bằng 5 bảng

Đây là một cách tiếp cận có thể hoàn thành công việc. Logic là sử dụng các truy vấn con tổng hợp để thực hiện các phép tính trung gian.

Truy vấn này nhận doanh thu từ On_sale bảng theo năm.

SELECT 
    YEAR(sale_date) yr, 
    SUM(sale_price) amt
FROM 
    On_sale
GROUP BY 
    YEAR(sale_date);

Truy vấn khác này lấy doanh thu trên mỗi cửa hàng và mỗi năm, sử dụng các bảng SoldProduct :

SELECT 
    s.store_number, 
    YEAR(s.sold_date) yr, 
    SUM(s.sold_quantity * p.retail_price) amt
FROM 
    Sold s
    INNER JOIN Product p 
        ON p.pid = s.pid
GROUP BY 
    s.store_number, 
    YEAR(sold_date);

Bây giờ chúng ta có thể JOIN kết quả của những truy vấn này với CityStore những cái bàn. Đồng thời, chúng tôi có thể chia các thành phố thành các loại kích thước khác nhau và sử dụng chúng để tổng hợp kết quả. Tôi đang sử dụng LEFT JOIN trong trường hợp một trong các truy vấn con tạo ra tập kết quả trống (khác, INNER JOIN ổn):

SELECT 
    COALESCE(sa.yr, so.yr) sale_year,
    CASE 
        WHEN c.population > 200 THEN 'large'
        WHEN c.population <= 200 AND c.population > 100 THEN 'medium'
        ELSE 'small'
    END as size_range,
    SUM(COALESCE(so.amt, 0) + COALESCE(sa.amt, 0)) revenue
FROM 
    City c
    INNER JOIN Store st 
        ON  st.state = c.state 
        AND st.city_name = c.city_name
    LEFT JOIN (
        SELECT 
            s.store_number, 
            YEAR(s.sold_date) yr, 
            SUM(s.sold_quantity * p.retail_price) amt
        FROM 
            Sold s
            INNER JOIN Product p 
                ON p.pid = s.pid
        GROUP BY 
            s.store_number, 
            YEAR(sold_date)
    ) so 
        ON  so.store_number = st.store_number
    LEFT JOIN (
        SELECT 
            YEAR(sale_date) yr, 
            SUM(sale_price) amt
        FROM 
            On_sale
        GROUP BY 
            YEAR(sale_date)
    ) sa 
        ON  sa.yr = so.yr
GROUP BY
    sale_year,
    size_range
ORDER BY
    sale_year,
    size_range

bản trình diễn này trên DB Fiddle với dữ liệu mẫu của bạn thể hiện các bước trung gian và cuối cùng trả về:

| sale_year | size_range | revenue |
| --------- | ---------- | ------- |
| 2017      | small      | 15      |
| 2018      | medium     | 14      |
| 2019      | large      | 12      |



  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 JOIN để thay thế các ID bằng giá trị từ một bảng khác

  2. Trong SQL, cách chọn 2 hàng trên cùng cho mỗi nhóm

  3. SQL:giữ số lượng trong hàng hoặc chọn số lượng từ db

  4. Cách cài đặt MySQL 8 trên Ubuntu

  5. PHP PDO làm thế nào để chạy một yêu cầu nhiều truy vấn?