首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql:按符号分组,但保留所有顶级目标值行

Mysql:按符号分组,但保留所有顶级目标值行
EN

Stack Overflow用户
提问于 2017-11-28 07:33:15
回答 2查看 33关注 0票数 0

下面的数据只是我的原始数据的摘要,由四个表的“联接”组成。要求是;

代码语言:javascript
复制
data :
 symbol  target  analyst
    a       1690    peas
    a       1230    tomato
    a       1235    papaya
    a       1230    papaya
    a       1690    apple 
    b       1450    bean
    b       1914    potato
    b       1540    tomato
    b       1797    papaya
    b       1880    apple 
    b       2000    turnips
    c       1550    bean
    c       1588    onion
    c       1588    onion
    c       1588    potato
    c       1463    soya
    c       1130    tomato    

required : symbol target analyst a 1690 peas a 1690 apple b 2000 turnips c 1588 onion c 1588 potato

也就是说,对于表中的每个符号,必须显示每个唯一分析师的max(目标)行。尝试使用‘max(目标)’和'group符号‘的组合,它只显示一个最大目标行。用于形成数据的代码的一部分是;

代码语言:javascript
复制
SELECT 
     a.symbol, c.target, c.analyst 
FROM table1 a
     LEFT JOIN table2 b 
         ON a.symbol = b.symbol 
     LEFT JOIN table3 c 
         ON a.symbol LIKE CONCAT('%', c.symbol , '%')
     LEFT JOIN table4 d 
         ON a.symbol = d.symbol;
EN

回答 2

Stack Overflow用户

发布于 2017-11-28 07:42:29

要得到所需的输出,可以自行加入

代码语言:javascript
复制
select distinct a.*
from demo a 
left join demo b on a.symbol = b.symbol
                 and a.target < b.target
where b.symbol is null

演示

票数 1
EN

Stack Overflow用户

发布于 2017-11-28 07:44:49

可以对获取每个符号的最大目标的select使用联接:

代码语言:javascript
复制
SELECT
    a.symbol,
    a.target,
    a.analyst
FROM data a
LEFT JOIN (SELECT b.symbol,MAX(b.target) as `maxval` FROM data b GROUP BY b.symbol) b
ON b.symbol = a.symbol AND b.`maxval` = a.target
ORDER BY a.symbol,a.target,a.analyst
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47526229

复制
相关文章

相似问题

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