目前已知商店和每日的商品库存信息,例如
商店 | 日期 | 商品 |
---|---|---|
商店1 | 2021-09-01 | 商品1 |
商店1 | 2021-09-02 | 商品1 |
商店1 | 2021-09-03 | 商品1 |
商店2 | 2021-09-01 | 商品1 |
商店2 | 2021-09-02 | 商品1 |
商店3 | 2021-09-03 | 商品1 |
如何查询9月1号、2号、3号都有商品的商店?感谢大神不吝赐教!
目前已知商店和每日的商品库存信息,例如
商店 | 日期 | 商品 |
---|---|---|
商店1 | 2021-09-01 | 商品1 |
商店1 | 2021-09-02 | 商品1 |
商店1 | 2021-09-03 | 商品1 |
商店2 | 2021-09-01 | 商品1 |
商店2 | 2021-09-02 | 商品1 |
商店3 | 2021-09-03 | 商品1 |
如何查询9月1号、2号、3号都有商品的商店?感谢大神不吝赐教!
按照shop字段进行分组,可获取商店存在几天的商品,再通过HAVING过滤一下SELECT shop FROM shop s WHERE s.time in ('2021-09-01','2021-09-02','2021-09-03') GROUP BY shop HAVING COUNT(product) = 3
;
按照下面的问题:如果一天内存在多个商品
SELECT
s.shop
FROM
( #查询出存在商品的日期和商店,这里就可以知道商店那几天天存在商品,且与同一天商品数量多少无关
SELECT shop, time FROM shop GROUP BY shop, time ) s
GROUP BY
s.shop
HAVING COUNT(time) = 3
https://tableconvert.com/
http://mysql.jsrun.net/
select 商店 from tableName where 日期 in('2021-09-01','2021-09-02','2021-09-03') group by 商店 HAVING count(商店)=3;
3 是日期数量
Mysql 日期/时间转换为字符串
https://blog.csdn.net/zyngoo/...
SELECT 店铺 FROM(
SELECT 店铺,日期 from 表
where 日期 in ("2021-09-01","2021-09-02","2021-09-03")
GROUP BY 店铺,日期 ) a
GROUP BY 店铺
HAVING count(店铺)=3
说得不对的话请大家指教批评😀
先说思路:做子查询,先查询商店-日期,使用groupconcat拼接成一个字段; 之后再根据日期条件做查询;
建表语句:
CREATE TABLE sale
(id
int(10) unsigned NOT NULL AUTO_INCREMENT,shop_name
varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,sale_date
datetime DEFAULT NULL,product_name
varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
数据:
INSERT INTO test
.sale
(id
, shop_name
, sale_date
, product_name
) VALUES (1, '商店1', '2021-09-01 00:00:00', '商品1');
INSERT INTO test
.sale
(id
, shop_name
, sale_date
, product_name
) VALUES (2, '商店1', '2021-09-02 00:00:00', '商品1');
INSERT INTO test
.sale
(id
, shop_name
, sale_date
, product_name
) VALUES (3, '商店1', '2021-09-03 00:00:00', '商品1');
INSERT INTO test
.sale
(id
, shop_name
, sale_date
, product_name
) VALUES (4, '商店2', '2021-09-01 00:00:00', '商品1');
INSERT INTO test
.sale
(id
, shop_name
, sale_date
, product_name
) VALUES (5, '商店2', '2021-09-02 00:00:00', '商品1');
INSERT INTO test
.sale
(id
, shop_name
, sale_date
, product_name
) VALUES (6, '商店3', '2021-09-03 00:00:00', '商品1');
查询sql:
SELECT T.shop_name,GROUP_CONCAT(T.sale_date) shopDates FROM sale
T where T.sale_date IN ('2021-09-01','2021-09-02','2021-09-03') GROUP BY T.shop_name;
结果:
剩下的就不用说了,直接 like '%%' and like '%%' 就可以
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
5 回答1.4k 阅读
3 回答1.2k 阅读✓ 已解决
感谢诸位的提供的思路,鉴于实际情况比我给的表格更为复杂,例如相同商店还有不同日期和不同商品,所以我最终的写法是这样的,现在写出来,也跟大家探讨一下:
SELECT DISTINCT 商店,COUNT(DISTINCT 日期) countdate FROM (
SELECT 商店 FROM 表 WHERE 日期='2021-09-01' -- AND 后续可以添加不同的商品信息
UNION
SELECT 商店 FROM 表 WHERE 日期='2021-09-02'
UNION
SELECT 商店 FROM 表 WHERE 日期='2021-09-03') AS tab GROUP BY 商店 HAVING countdate=3;
感谢大家!