我正在尝试从我的数据库中列出一年中每个月最好的租赁书籍。我试图列出最多 10 本书,并从出租最多的书向下列出它们,例如
- 十二月 |书名| 3 份
- 十二月 |书名| 2份
- 十二月 |书名| 1 份
- 十一月 |书名| 2 份
- 十一月 |书名| 1 份
- 十月 |书名| 2 份
目前是随机输出,但按月份分组。我将附上我的架构和查询。
查询
USE data_mart;
SELECT bookId, book_name, COUNT(*) AS 'Rental Count', month(rental_date) as 'Month'
FROM fact_rental
GROUP BY month(rental_date), bookId
ORDER BY month(rental_date) DESC;
架构
CREATE TABLE fact_rental (
rental_id INT(8) UNSIGNED AUTO_INCREMENT,
cardNo int(11) NOT NULL,
borrower_fname varchar(45) DEFAULT NULL,
borrower_lname varchar(45) DEFAULT NULL,
staffNo int(11) NOT NULL,
staff_fname varchar(45) DEFAULT NULL,
staff_lname varchar(45) DEFAULT NULL,
branchId int(11) NOT NULL,
branchName varchar(45) DEFAULT NULL,
bookId int(11) NOT NULL,
book_name varchar(45) DEFAULT NULL,
rental_date DATETIME,
return_date DATETIME DEFAULT NULL,
count_returns INTEGER(10) DEFAULT 1,
count_rentals INTEGER(8) UNSIGNED DEFAULT 1,
FOREIGN KEY (staffNo) REFERENCES dim_staff(staffNo),
FOREIGN KEY (branchId) REFERENCES dim_library_branch(branchId),
FOREIGN KEY (cardNo) REFERENCES dim_borrower(cardNo),
FOREIGN KEY (bookId) REFERENCES dim_book(bookId),
PRIMARY KEY (rental_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
最佳答案
您似乎想要:
SELECT bookId, book_name, COUNT(*) AS RentalCount, month(rental_date) as Month
FROM fact_rental
GROUP BY month(rental_date), bookId
ORDER BY RentalCount DESC
LIMIT 10;
关于MYSQL 按日期分组 按书籍排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47114983/