首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql组没有做我期望的事情?

mysql组没有做我期望的事情?
EN

Stack Overflow用户
提问于 2011-11-08 02:57:53
回答 3查看 64关注 0票数 0
代码语言:javascript
复制
SELECT
      bp.product_id,bs.step_number,
      p.price, pd.name as product_name
    FROM 
      builder_product bp
      JOIN builder_step bs ON bp.builder_step_id = bs.builder_step_id
      JOIN builder b ON bp.builder_id = b.builder_id
      JOIN product p ON p.product_id = bp.product_id
      JOIN product_description pd ON p.product_id = pd.product_id
      WHERE b.builder_id = '74' and bs.optional != '1'
    group by bs.step_number
    ORDER by bs.step_number, p.price

但这是我的结果

代码语言:javascript
复制
88  1   575.0000    Lenovo Thinkcentre POS PC
244 2   559.0000    Touchscreen with MSR - Firebox 15"
104 3   285.0000    Remote Order Printer - Epson
97  4   395.0000    Aldelo Lite
121 5   549.0000    Cash Register Express  - Pro
191 6   349.0000    Integrated Payment Processing
155 7   369.0000    Accessory - Posiflex 12.1" LCD Customer Display
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-08 03:12:15

GROUP BY不是这样工作的。如果按多个列进行分组,则select只能返回:

从其他列(如MIN()、MAX()、AVG()... )中提取按

  • 聚合函数分组的列

所以你需要这样做:

代码语言:javascript
复制
SELECT
  bs.step_number,
  MIN(p.price) AS min_price, pd.name as product_name
FROM 
  builder_product bp
  JOIN builder_step bs ON bp.builder_step_id = bs.builder_step_id
  JOIN builder b ON bp.builder_id = b.builder_id
  JOIN product p ON p.product_id = bp.product_id
  JOIN product_description pd ON p.product_id = pd.product_id
  WHERE b.builder_id = '74' and bs.optional != '1'
group by bs.step_number, pd.name
ORDER by bs.step_number, min_price

(MySQL允许非常宽松的语法,并且会很乐意地删除每个组中的随机行,但其他数据库管理系统会在原始查询中触发错误。)

票数 1
EN

Stack Overflow用户

发布于 2011-11-08 03:23:11

连接到仅包含每个组的最小值的表的子选择

在本例中。mygroup min(amt)返回组的最低金额项

然后,我将此连接回主表,作为一个完整的内连接,以将记录限制为最小记录。

代码语言:javascript
复制
Select A.myGROUP, A.Amt
from mtest A
  INNER JOIN (Select myGroup, min(Amt) as minAmt from mtest group by mygroup) B
  ON B.myGroup=A.mygroup
  and B.MinAmt = A.Amt
票数 1
EN

Stack Overflow用户

发布于 2011-11-08 03:06:13

是。每个不同的组密钥只返回一次。这个问题不容易解决。运行两个不同的查询,然后组合结果。如果这不是一个选项,则为每个步骤的最低价格创建一个临时表,将这些表连接到查询中。

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

https://stackoverflow.com/questions/8041177

复制
相关文章

相似问题

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