首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL为每个category_id提取X列

MySQL为每个category_id提取X列
EN

Stack Overflow用户
提问于 2011-04-12 22:56:43
回答 3查看 154关注 0票数 0

我不知道在mysql中是否可以通过一个查询实现这一点。

假设我有一个表"products“,它包含"id”、"category_id“、"product_name”、"price“

案例1:我想从价格超过100美元的每个类别中获取5个产品

案例2:我想获取

1-“1类中的3种产品”

2-“类别2的5种产品”

3- "3个第二类产品,其价格高于100,并且没有在上面的第二点中获得“

在一个查询中每个案例,这是可能的吗?

PS :表大约有100K行……

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-13 20:10:44

我发现了这个方法:它非常快,并且给了我想要的东西:

代码语言:javascript
复制
SELECT  l.*
FROM    (
        SELECT  category,
                COALESCE(
                (
                SELECT  id
                FROM    writings li
                WHERE   li.category= dlo.category 
                ORDER BY
                        li.category, li.id
                LIMIT 15, 1
                ), CAST(0xFFFFFFFF AS DECIMAL)) AS mid
        FROM    (
                SELECT  id as category
                FROM    cats dl 
                ) dlo
        ) lo, writings l
WHERE   l.category>= lo.category
        AND l.category<= lo.category
        AND l.id <= lo.mid
票数 1
EN

Stack Overflow用户

发布于 2011-04-12 23:11:31

我认为您可以使用嵌套的select语句来实现这一点。

http://dev.mysql.com/tech-resources/articles/4.1/subqueries.html

不过,在获得查询之后,我不确定如何将它们用作单独的select语句。我的意思是,他们都将是一个记录。

票数 0
EN

Stack Overflow用户

发布于 2011-04-12 23:21:37

案例二我想我有..。

代码语言:javascript
复制
  (
  select * from products where category_id = 1 limit 3
  )
union 
  ( 
  select * from products where category_id = 2 limit 5
  )
union (
  select * from products where category_id = 2 and price > 100 limit 3
)

请注意,union将消除重复,union all将允许重复(因此速度更快)。

你看过了吗?

mySQL Returning the top 5 of each category

这看起来就是你要问的..。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5637284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档