需要查询以显示既有男性员工又有女性员工的部门。

huangapple go评论119阅读模式
英文:

Need query to display the departments which are having both MALE and FEMALE Employees

问题

需要查询以显示同时拥有男性和女性员工的部门。

SELECT deptname, sex
FROM departments
WHERE deptname IN (SELECT deptname FROM departments WHERE sex = 'M')
  AND deptname IN (SELECT deptname FROM departments WHERE sex = 'F');

期望的输出为:

Deptname   Sex
SALES      M
SALES      F
SALES      M
SALES      F
ENG        M
ENG        F
英文:

Need query to display the departments which are having both MALE and FEMALE Employees

CREATE TABLE departments(deptname VARCHAr2(20),sex VARCHAR2(2));

INSERT INTO departments VALUES('SALES','M');
INSERT INTO departments VALUES('SALES','F');
INSERT INTO departments VALUES('SALES','M');
INSERT INTO departments VALUES('SALES','F');
INSERT INTO departments VALUES('ENG','M');
INSERT INTO departments VALUES('ENG','F');
INSERT INTO departments VALUES('MKT','M');
INSERT INTO departments VALUES('CLE','F');
INSERT INTO departments VALUES('AUTO','M');
INSERT INTO departments VALUES('AUTO','M');
INSERT INTO departments VALUES('ENV','F');
INSERT INTO departments VALUES('ENV','F');


Expected Output
Deptname   Sex
SALES      M
SALES      F
SALES      M
SALES      F
ENG        M
ENG        F

Please help me.

Thanks in Advance.

答案1

得分: 1

使用窗口函数来避免两次查询表:

SELECT *
FROM (SELECT d.*,
             COUNT(DISTINCT sex) OVER (PARTITION BY deptname) sex_count
        FROM departments d)
WHERE sex_count > 1
英文:

Or using a windowing function to avoid hitting the table twice:

SELECT *
  FROM (SELECT d.*,
               COUNT(DISTINCT sex) OVER (PARTITION BY deptname) sex_count
          FROM departments d)
 WHERE sex_count > 1

答案2

得分: 0

以下是翻译好的内容:

可以执行以下操作:

    选择 *
    从部门
    其中部门名称在 (
      选择部门名称从部门 
      按部门名称分组,具有计数(不同性别)> 1
    )

请告诉我如果您需要任何其他的翻译帮助。

英文:

You can do:

select *
from departments
where deptname in (
  select deptname from departments 
  group by deptname having count(distinct sex) > 1
)

答案3

得分: 0

从Oracle 12开始,您可以使用以下代码:

SELECT deptname, sex
FROM   departments
MATCH_RECOGNIZE(
  PARTITION BY deptname
  ORDER BY sex
  ALL ROWS PER MATCH
  PATTERN (^ female+ male+ $)
  DEFINE
    female AS sex = 'F',
    male   AS sex = 'M'
);

它的输出是:

DEPTNAME SEX
ENG F
ENG M
SALES F
SALES F
SALES M
SALES M

fiddle

英文:

From Oracle 12, you can use:

SELECT deptname, sex
FROM   departments
MATCH_RECOGNIZE(
  PARTITION BY deptname
  ORDER BY sex
  ALL ROWS PER MATCH
  PATTERN (^ female+ male+ $)
  DEFINE
    female AS sex = 'F',
    male   AS sex = 'M'
);

Which outputs:

DEPTNAME SEX
ENG F
ENG M
SALES F
SALES F
SALES M
SALES M

fiddle

huangapple
  • 本文由 发表于 2023年3月21日 02:28:36
  • 转载请务必保留本文链接:https://go.coder-hub.com/75794026.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定