请教一个sql或者实现思路?

Jordandu
  • 2
新手上路,请多包涵

目前已知商店和每日的商品库存信息,例如

商店日期商品
商店12021-09-01商品1
商店12021-09-02商品1
商店12021-09-03商品1
商店22021-09-01商品1
商店22021-09-02商品1
商店32021-09-03商品1

如何查询9月1号、2号、3号都有商品的商店?感谢大神不吝赐教!

回复
阅读 689
5 个回答
Jordandu
  • 2
新手上路,请多包涵
✓ 已被采纳

感谢诸位的提供的思路,鉴于实际情况比我给的表格更为复杂,例如相同商店还有不同日期和不同商品,所以我最终的写法是这样的,现在写出来,也跟大家探讨一下:
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;
感谢大家!

image.png
按照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
Balloon_Fish
  • 4
新手上路,请多包涵
SELECT 店铺 FROM(
SELECT 店铺,日期 from 表
where 日期 in ("2021-09-01","2021-09-02","2021-09-03")
GROUP BY 店铺,日期 ) a
GROUP BY 店铺
HAVING count(店铺)=3

说得不对的话请大家指教批评😀

MOON
  • 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;
结果:
image.png
剩下的就不用说了,直接 like '%%' and like '%%' 就可以

你知道吗?

宣传栏