MYSQL 按日期分组 按书籍排序

标签 mysql group-by sql-order-by

我正在尝试从我的数据库中列出一年中每个月最好的租赁书籍。我试图列出最多 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/

相关文章:

mysql - 在 Sequelize 上查询空关联(最好是 v1.7)

java - Java 对象的多个 HashCode

mysql - 想计算group by option渲染的count的总和

mysql - 按 id 排序时非常慢,但按时间戳、id 排序时速度很快

php - 在 mysql_query 中使用 mysql_insert_id

MySQL 查询帮助...检查真假?

mysql - GROUP BY 不适用于子查询

mysql - 没有 ORDER BY 子句的 SELECT 查询不返回任何结果

php - MySQL ORDER BY 不同的表列但是

django - 在 Django 中,如何以任意非字母顺序通过多项选择 CharField 进行排序?