首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果条件存在,mysql选择distinct

如果条件存在,mysql选择distinct
EN

Stack Overflow用户
提问于 2018-04-22 19:49:55
回答 2查看 643关注 0票数 1

我有一张桌子:

代码语言:javascript
复制
std_id  std_type  std_dept  target
  1      type-1     ALL       15
  2      type-1     HRD       10
  3      type-2     ALL       1
  4      type-2     ACCTG     5
  5      type-3     ALL       5
  6      type-4     ALL       25
  1. std_dept ALL意味着每个std_typestd_target对所有部门都有效。
  2. std_dept具有特定的dept值,重写值窗体点(1)。

因此,我的问题是,假设我来自HRD部门,我希望得到如下结果集:

代码语言:javascript
复制
std_id  std_type  std_dept  target
  2      type-1     HRD       10
  3      type-2     ALL       1
  5      type-3     ALL       5
  6      type-4     ALL       25

我真的很喜欢展示我的作品,但我一点也不知道,我不知道如何清楚地展示select * from std_table (for each std_type) where std_dept='HRD' if exist else get from std_dept='ALL'

我需要指针如果不是代码

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-22 19:53:44

您可以使用NOT EXISTS和关联子查询:

代码语言:javascript
复制
SELECT *
FROM tab
WHERE std_dept = 'HRD'           
UNION ALL
SELECT *
FROM tab t1
WHERE std_dept = 'ALL'
  AND NOT EXISTS (SELECT *
                  FROM tab t2
                  WHERE t2.std_dept = 'HRD'   
                    AND t1.std_type = t2.std_type);

DBFiddle演示

票数 0
EN

Stack Overflow用户

发布于 2018-04-22 20:13:25

听起来你想称它的重量,所以如果你来自人力资源开发,那么你想要人力资源开发或者全部,如果你想要ACCTG,那么你想要ACCTG或者所有,类型1-4。

您可以按std_type进行分组,以使它们区别开来,并按此进行排序以使顺序正确。对于加权项,您可以创建一个列,它是与WHERE子句中使用的相同值进行比较的结果,例如:

代码语言:javascript
复制
SELECT std_id, DISTINCT(std_type) AS std_type,
       std_dept, target, 
       IF (std_dept = 'HRD', 50, 10) AS weight
FROM mytable
WHERE std_dept IN ('ALL', 'HRD')
GROUP BY std_id, std_dept, target, weight
ORDER BY std_type
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49970094

复制
相关文章

相似问题

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