mysql - Mysql Query:找到图书馆上结账次数最多的人?
问题描述
我有下表,其中包含以下项目
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);
我怎样才能实现以下查询:
- 目前拥有最多书籍的人是谁?
解决方案
您可以按人分组,得到结帐计数减去签到计数(使用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 个人是签出 4 本书的赢家。
推荐阅读
- python - 在 Python 3 中动态生成变量名
- javascript - “.push in array”的未捕获类型错误
- r - 无法添加 git url 以将 Rstudio 中的项目与 git 存储库连接
- controller - 具有更多闪存的控制器是否消耗更多能量
- python - 如何在for循环python中向np数组添加一行
- html - 图像的引导列不会内联
- android - 华硕触摸屏显示器和安卓设备的问题
- selenium - 将参数传递给 Junit 5 TestRunner 扩展
- regex - 正则表达式逐位输入十进制数
- scala - spark-rdbms :覆盖模式的工作方式与 Append 不同