在mysql中查找匹配对的sql查询
社区假设问题: 如果一个图书馆有两本书(第一册,第二册),一年内有多少顾客同时借了这两本书 表格在mysql中查找匹配对的sql查询,mysql,sql,Mysql,Sql,社区假设问题: 如果一个图书馆有两本书(第一册,第二册),一年内有多少顾客同时借了这两本书 表格 CREATE TABLE `check0` ( `lib_card_num` int NOT NULL, `first_name` varchar(45) NOT NULL, `last_name` varchar(45) NOT NULL, `checkout_timestamp_utc` timestamp(6) NOT NULL, `due_date` date NOT N
CREATE TABLE `check0` (
`lib_card_num` int NOT NULL,
`first_name` varchar(45) NOT NULL,
`last_name` varchar(45) NOT NULL,
`checkout_timestamp_utc` timestamp(6) NOT NULL,
`due_date` date NOT NULL,
`type` varchar(10) DEFAULT NULL,
`name` varchar(45) DEFAULT NULL,
`unique_id` int NOT NULL,
PRIMARY KEY (`unique_id`),
KEY `parent_index1` (`lib_card_num`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
;
数据
INSERT INTO testlibrary.check0
(lib_card_num,FIRST_NAME,LAST_NAME,CHECKOUT_TIMESTAMP_UTC,DUE_DATE,TYPE,NAME,UNIQUE_ID)
VALUES
(1,'ROB','BLOW',DATE_ADD(current_timestamp(), INTERVAL -30 day),DATE_ADD(current_date(),INTERVAL -5 DAY),'PHYSICAL','SHEBA',100),
(1,'ROB','BLOW',DATE_ADD(current_timestamp(), INTERVAL -30 day),DATE_ADD(current_date(),INTERVAL -5 DAY),'ELECTRONIC','THUNDERPOINT',101),
(2,'JOHN','DOE',DATE_ADD(current_timestamp(), INTERVAL -15 day),DATE_ADD(current_date(),INTERVAL -1 DAY),'ELECTRONIC','THUNDERPOINT',102),
(2,'JOHN','DOE',DATE_ADD(current_timestamp(), INTERVAL -15 day),DATE_ADD(current_date(),INTERVAL -1 DAY),'PHYSICAL','SHEBA',103),
(3,'JANE','DOE',DATE_ADD(current_timestamp(), INTERVAL -45 day),DATE_ADD(current_date(),INTERVAL -20 DAY),'PHYSICAL','SHEBA',104),
(3,'JANE','DOE',DATE_ADD(current_timestamp(), INTERVAL -45 day),DATE_ADD(current_date(),INTERVAL -20 DAY),'ELECTRONIC','THUNDERPOINT',105)
也许试试这个
select count(lib_card_num) as result
from
(select distinct check0.lib_card_num from sys.check0
where check0.checkout_timestamp_utc in
(SELECT checkout_timestamp_utc
FROM
(SELECT check0.checkout_timestamp_utc, COUNT(check0.checkout_timestamp_utc) count
FROM sys.check0
GROUP BY check0.checkout_timestamp_utc) sub1
WHERE sub1.count > 1)) sub2;
如果一个图书馆有两本书(第一册,第二册),一年内有多少顾客同时借了这两本书
这听起来不是很理论化。但您可以使用聚合来实现这一点。但是,您的描述没有名为customer
或book\u title
的列,因此您需要根据数据模型进行调整。这毕竟是一个理论问题:
要让客户同时拥有这两本书:
select customer
from check0 c
where book_title in ('book 1', 'book 2')
group by customer
having count(distinct book_title) = 2;
然后,您可以使用附加的子查询对其进行计数:
select count(*)
from (select customer
from check0 c
where book_title in ('book 1', 'book 2')
group by customer
having count(distinct book_title) = 2
) c;
你的问题和你的数据没有任何关系。数据中没有明显的“客户”或“账簿”。幸运的是,这是一个理论问题。