場(chǎng)景:一般用作數(shù)據(jù)統(tǒng)計(jì),比如統(tǒng)計(jì)一個(gè)淘寶用戶在年、月、日的維度上的訂單數(shù)。
業(yè)務(wù):一個(gè)集合,以時(shí)間維度來(lái)進(jìn)行分組求和。
準(zhǔn)備一張訂單表order,有一些常規(guī)屬性,比如創(chuàng)建時(shí)間,訂單號(hào)。
DDL語(yǔ)句如下:
CREATE TABLE `order` (
`order_id` INT AUTO_INCREMENT PRIMARY KEY,
`order_number` VARCHAR(20) NOT NULL,
`order_date` TIMESTAMP DEFAULT NULL,
`total_amount` DECIMAL(10, 2) NOT NULL
);
測(cè)試數(shù)據(jù)準(zhǔn)備如下,50條DML語(yǔ)句,其中order_date分布在2023年1月到12月之間。
這一看就是剁手月光的節(jié)奏,月月都不消停地買(mǎi)(狗頭保命):
INSERT INTO `order` (`order_number`, `order_date`, `total_amount`) VALUES
('ORD100001', '2023-01-05 12:30:00', 50.99),
('ORD100002', '2023-01-15 14:45:00', 75.50),
('ORD100003', '2023-02-02 10:00:00', 120.75),
('ORD100004', '2023-02-18 16:20:00', 30.25),
('ORD100005', '2023-03-10 08:55:00', 90.00),
('ORD100006', '2023-03-22 20:10:00', 65.50),
('ORD100007', '2023-04-08 09:30:00', 110.25),
('ORD100008', '2023-04-17 15:45:00', 40.75),
('ORD100009', '2023-05-03 18:20:00', 85.00),
('ORD100010', '2023-05-15 12:40:00', 150.00),
('ORD100011', '2023-06-02 14:55:00', 120.50),
('ORD100012', '2023-06-18 11:15:00', 95.25),
('ORD100013', '2023-07-05 17:30:00', 60.00),
('ORD100014', '2023-07-20 19:45:00', 130.80),
('ORD100015', '2023-08-08 08:10:00', 75.50),
('ORD100016', '2023-08-17 22:30:00', 45.25),
('ORD100017', '2023-09-03 14:50:00', 110.00),
('ORD100018', '2023-09-15 16:15:00', 80.25),
('ORD100019', '2023-10-02 11:30:00', 95.50),
('ORD100020', '2023-10-18 13:45:00', 120.75),
('ORD100021', '2023-11-05 09:00:00', 55.00),
('ORD100022', '2023-11-20 18:20:00', 90.80),
('ORD100023', '2023-12-08 10:45:00', 70.50),
('ORD100024', '2023-12-17 14:00:00', 35.75),
('ORD100025', '2023-12-29 18:20:00', 120.00),
('ORD100076', '2023-03-08 15:30:00', 80.50),
('ORD100077', '2023-03-17 12:00:00', 45.75),
('ORD100078', '2023-04-02 16:20:00', 60.00),
('ORD100079', '2023-04-15 19:45:00', 130.80),
('ORD100080', '2023-05-03 08:10:00', 75.50),
('ORD100081', '2023-05-15 22:30:00', 45.25),
('ORD100082', '2023-06-02 14:50:00', 110.00),
('ORD100083', '2023-06-18 16:15:00', 80.25),
('ORD100084', '2023-07-05 11:30:00', 95.50),
('ORD100085', '2023-07-20 13:45:00', 120.75),
('ORD100086', '2023-08-05 09:00:00', 55.00),
('ORD100087', '2023-08-20 18:20:00', 90.80),
('ORD100088', '2023-09-08 10:45:00', 70.50),
('ORD100089', '2023-09-17 14:00:00', 35.75),
('ORD100090', '2023-09-29 18:20:00', 120.00),
('ORD100091', '2023-10-08 15:30:00', 80.50),
('ORD100092', '2023-10-17 12:00:00', 45.75),
('ORD100093', '2023-11-02 16:20:00', 60.00),
('ORD100094', '2023-11-15 19:45:00', 130.80),
('ORD100095', '2023-12-03 08:10:00', 75.50),
('ORD100096', '2023-12-15 22:30:00', 45.25),
('ORD100097', '2023-12-29 14:50:00', 110.00),
('ORD100098', '2023-12-30 16:15:00', 80.25),
('ORD100099', '2023-12-31 11:30:00', 95.50),
('ORD100100', '2023-12-31 13:45:00', 120.75);
有了以上測(cè)試數(shù)據(jù),現(xiàn)在我們的需求:訂單表在每月為單位的訂單數(shù)、每天為單位的訂單數(shù)。
首先是每月為單位的訂單數(shù),要求返回?cái)?shù)據(jù)格式為:
{
"orderMonth": "2023-01",
"orderCount": 4
}
sql編寫(xiě)如下:
SELECT DATE_FORMAT(order_date, '%Y-%m') as orderMonth, COUNT(*) as orderCount
FROM `order`
GROUP BY orderMonth;
返回?cái)?shù)據(jù)
對(duì)sql的解讀:這里的關(guān)鍵是使用DATE_FORMAT函數(shù)來(lái)將order_date字段格式化為年月的形式,然后使用GROUP BY按照這個(gè)格式化的日期進(jìn)行分組,并使用COUNT(*)來(lái)統(tǒng)計(jì)每組的記錄條數(shù)。
然后是每天為單位的訂單數(shù),要求返回?cái)?shù)據(jù)格式如下:
{
"orderDay": "2023-01-08",
"orderCount": 2
}
sql編寫(xiě)如下:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-793973.html
SELECT DATE_FORMAT(order_date, '%Y-%m-%d') as orderDay, COUNT(*) as orderCount
FROM `order`
GROUP BY orderDay;
查詢結(jié)果,我只能說(shuō)能恐怖,我還沒(méi)有截圖完整,這個(gè)買(mǎi)快遞的頻率,直男流淚(╥╯^╰╥):
好的,以上就是這次sql的分享,如果你覺(jué)得對(duì)你有幫助,同學(xué)能動(dòng)動(dòng)小手指,幫我點(diǎn)個(gè)贊。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-793973.html
到了這里,關(guān)于【SQL】對(duì)表中的記錄通過(guò)時(shí)間維度分組,統(tǒng)計(jì)出每組的記錄條數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!