MySQL是一種常用的關(guān)系型數(shù)據(jù)庫,隨著數(shù)據(jù)量的增加,數(shù)據(jù)表的規(guī)模也會越來越大。為了提高查詢效率,可以使用分表技術(shù)將大型表按照某個規(guī)則進行分割。但是,當(dāng)需要查詢某個維度的數(shù)據(jù)時就需要考慮如何合并分表的數(shù)據(jù)。
-- 創(chuàng)建訂單主表 CREATE TABLE orders_main ( order_id INT PRIMARY KEY, customer_id INT, order_time DATETIME, order_total DECIMAL(10,2) ); -- 創(chuàng)建訂單詳情表 CREATE TABLE orders_detail_1 ( order_id INT, product_id INT, product_name VARCHAR(50), product_price DECIMAL(10,2), product_num INT, PRIMARY KEY (order_id, product_id) ); -- 創(chuàng)建訂單詳情表 CREATE TABLE orders_detail_2 ( order_id INT, product_id INT, product_name VARCHAR(50), product_price DECIMAL(10,2), product_num INT, PRIMARY KEY (order_id, product_id) );
假設(shè)我們需要查詢按照時間段查詢訂單總金額。可以使用UNION ALL將分表的數(shù)據(jù)進行合并,并使用GROUP BY和SUM函數(shù)計算總金額。
-- 按照時間段查詢訂單總金額 SELECT DATE_FORMAT(order_time, '%Y-%m') AS time, SUM(order_total) AS total_amount FROM ( SELECT order_time, order_total FROM orders_main WHERE order_time BETWEEN '2022-01-01' AND '2022-12-31' UNION ALL SELECT order_time, order_total FROM orders_detail_1 JOIN orders_main ON orders_detail_1.order_id = orders_main.order_id WHERE order_time BETWEEN '2022-01-01' AND '2022-12-31' UNION ALL SELECT order_time, order_total FROM orders_detail_2 JOIN orders_main ON orders_detail_2.order_id = orders_main.order_id WHERE order_time BETWEEN '2022-01-01' AND '2022-12-31' ) AS order_all GROUP BY time;
這樣,我們可以得到按照時間段的訂單總金額。在查詢時,UNION ALL會將結(jié)果合并在一起,需要注意字段的對應(yīng)關(guān)系,以便正確統(tǒng)計結(jié)果。