mysql select distinct if condition exists

9rnv2umw  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(529)

我有这张table:

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
``` `std_dept` 有价值的 `ALL` 手段 `std_target` 对于每个 `std_type` 适用于所有部门 `std_dept` 使用特定的dept值,重写值form point(1)。
所以,我的问题是假设我来自 `HRD` dept和我希望结果集如下:

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'` . 
如果不是代码,我需要指针
zzlelutf

zzlelutf1#

这听起来像是你想加权,所以如果你是人力资源部的,那么你想要人力资源部或全部,如果你想要acctg,那么你想要acctg或全部,对于类型1-4。
您可以按std\u类型分组以使它们不同,然后按该类型排序以使顺序正确。对于加权,您可以创建一个列,该列是与where子句中使用的相同值进行比较的结果,例如:

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
hsvhsicv

hsvhsicv2#

你可以用 NOT EXISTS 和相关子查询:

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演示

相关问题