Mysql 查询 : find the most checkout person on library?

标签 mysql sql

<分区>

我有下表,其中包含以下项目

CREATE TABLE IF NOT EXISTS `lib_transactions` (
  `transaction_id` int(11) NOT NULL,
  `person` varchar(60) NOT NULL,
  `isbn` varchar(20) NOT NULL,
  `action` varchar(20) NOT NULL,
  `timestamp` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=205 DEFAULT CHARSET=utf8;

--
-- Dumping data for table `lib_transactions`
--

INSERT INTO `lib_transactions` (`transaction_id`, `person`, `isbn`, `action`, `timestamp`) VALUES
(186, '1', '99-9263-544-4', 'check-out', 1483228800),
(187, '2', '99-9263-544-5', 'check-out', 1483229100),
(188, '1', '99-9263-544-4', 'check-in', 1483315200),
(189, '2', '99-9263-544-5', 'check-in', 1483661100),
(190, '3', '99-9263-544-4', 'check-out', 1483747500),
(191, '2', '99-9263-544-6', 'check-out', 1483833900),
(192, '2', '99-9263-544-6', 'check-in', 1483920300),
(193, '3', '99-9263-544-7', 'check-out', 1484006700),
(194, '3', '99-9263-544-8', 'check-out', 1484100300),
(195, '3', '99-9263-544-7', 'check-in', 1484453100),
(196, '3', '99-9263-544-8', 'check-in', 1484460300),
(197, '4', '99-9263-544-7', 'check-out', 1484553900),
(198, '4', '99-9263-544-8', 'check-out', 1484611500),
(199, '4', '99-9263-544-7', 'check-in', 1484705100),
(200, '4', '99-9263-543-8', 'check-in', 1484798700),
(201, '5', '99-9263-543-1', 'check-out', 1484798700),
(202, '5', '99-9263-544-2', 'check-out', 1484798700),
(203, '5', '99-9263-542-3', 'check-out', 1484798700),
(204, '5', '99-9263-541-4', 'check-out', 1484798700);

如何实现以下查询:

- 目前谁拥有最多的书?

最佳答案

您可以按人分组,得到 checkout 次数减去签到次数(使用 case when),然后按结果降序排序。然后只保留前 1 个结果:

select   person, 
         sum(case action when 'check-out' then 1 when 'check-in' then -1 else 0 end) checked_out
from     lib_transactions
group by person
order by checked_out desc
limit    1

根据您的示例数据,第 5 个人是赢家,已 checkout 4 本书。

关于Mysql 查询 : find the most checkout person on library?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55211134/

相关文章:

sql - 甲骨文数据库。将行的副本插入同一个表(重复键错误消息)

mysql - 如何使用固定的值列表进行查询

sql - 即使 autocommit=True,INSERT 和 UPDATE 语句也没有效果

从字符串到日期时间的 SQL Server 日期比较

c# - 从 MySQL 设置 WinForm 显示日期

mysql - 在MySQL中选择多个同名列

sql - 你可以在 MySql 中使用自动增量而不是它是主键吗

java - 以最快的方式将大量数据从vertcicadb表批量加载到mysql表

phpmyadmin 拒绝所有权限(Arch Linux 设置)

php - 为所有用户更新的共享 HTML 页面