Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hasilkan kueri menggunakan 5 tabel

Berikut adalah pendekatan yang mungkin menyelesaikan pekerjaan. Logikanya adalah menggunakan subkueri agregat untuk melakukan perhitungan menengah.

Kueri ini mendapatkan pendapatan dari On_sale tabel berdasarkan tahun.

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

Kueri lain ini mendapatkan pendapatan per toko dan per tahun, menggunakan tabel Sold dan Product :

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);

Sekarang kita bisa JOIN hasil kueri ini dengan City dan Store tabel. Pada saat yang sama, kami dapat membagi kota ke dalam kategori ukuran yang berbeda dan menggunakannya untuk menggabungkan hasil. Saya menggunakan LEFT JOIN jika salah satu subkueri menghasilkan kumpulan hasil kosong (jika tidak, INNER JOIN tidak apa-apa):

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

demo di DB Fiddle dengan data sampel Anda menunjukkan langkah-langkah perantara, dan akhirnya kembali:

| 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. Ekstrak substring dengan pola tertentu di MySql

  2. Terapkan batasan unik komposit yang bergantung pada nilai kolom induk

  3. Tabel putar hanya mengembalikan 1 baris

  4. Cara meneruskan variabel ke MYSQL menggunakan Python

  5. Praktik Terbaik untuk Membuat Indeks di Tabel MySQL Anda – Rolling Index Builds