开发者社区> 问答> 正文

mysql如何把一个数据表中的每个分类的固定数目的信息查询出来

比如有一个商品表
表中有裤子,上衣,鞋等等分类
每种分类有多条分类相同的信息,
比如裤子有 短裤,长裤,开裆裤等等
如何查询到一个结果集,结果集中,裤子有N条信息,上衣有N条信息,鞋有N条信息 N == N
因为分类也有好多种,如何查询所有分类满足上面约束的信息呢?

展开
收起
蛮大人123 2016-02-08 14:16:19 3661 0
2 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    如果是每次查询都是固定的分类,那么直接写多条查询,最后把他们用 Union 合并起来。如果你需要完全动态地获得分类,那么需要写存储过程来实现了。

    2019-07-17 18:39:38
    赞同 展开评论 打赏
  • 公益是一辈子的事, I am digoal, just do it. 阿里云数据库团队, 擅长PolarDB, PostgreSQL, DuckDB, ADB等, 长期致力于推动开源数据库技术、生态在中国的发展与开源产业人才培养. 曾荣获阿里巴巴麒麟布道师称号、2018届OSCAR开源尖峰人物.

    这个需求可以使用窗口功能来搞定,PostgreSQL提供了这个功能:

    digoal=# create table tbl (id int, class1 int, class2 int);
    CREATE TABLE
    digoal=# insert into tbl values (1,1,1),(2,1,2),(3,1,3),(4,2,7),(5,2,8),(6,3,1),(7,3,8);
    INSERT 0 7
    digoal=# select count(*) over(partition by class1) cn,* from tbl;
     cn | id | class1 | class2 
    ----+----+--------+--------
      3 |  1 |      1 |      1
      3 |  2 |      1 |      2
      3 |  3 |      1 |      3
      2 |  4 |      2 |      7
      2 |  5 |      2 |      8
      2 |  6 |      3 |      1
      2 |  7 |      3 |      8
    (7 rows)
    
    digoal=# select * from (select count(*) over(partition by class1) cn,* from tbl)t where cn=2;
     cn | id | class1 | class2 
    ----+----+--------+--------
      2 |  4 |      2 |      7
      2 |  5 |      2 |      8
      2 |  6 |      3 |      1
      2 |  7 |      3 |      8
    (4 rows)
    2019-07-17 18:39:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像