Mysql 选择不同但带有列的';s值
这是我想要的 假设我们有这张桌子Mysql 选择不同但带有列的';s值,mysql,Mysql,这是我想要的 假设我们有这张桌子 Name Email Department Branch ------------------------------------------------------ John john@test.ca Information Technology SAP John john@test.ca Not Available Not Available Bret brett@test.ca
Name Email Department Branch
------------------------------------------------------
John john@test.ca Information Technology SAP
John john@test.ca Not Available Not Available
Bret brett@test.ca Emergency Response 911
Bret brett@test.ca Not Available Not Available
diana diana@test.ca Not Available Not Available
现在我基本上想要得到以下结果:
如果约翰有“信息技术”和“不可用”,那么“信息技术”将成为优先事项。基本上,只有当John不属于任何其他部门时,才会显示不可用行。
因此,结果表如下所示:
Name Email Department Branch
-----------------------------------------------------
John john@test.ca Information Technology SAP
Bret brett@test.ca Emergency Response 911
Diana diana@test.ca Not Available Not Available
谢谢 > P>此示例数据需要一个<代码>案例<代码>表达式来检查<代码>“不可用”<代码>,并将其视为<代码> null <代码>,这样您就可以聚合(用<代码> min <代码>或<代码> max >代码>):
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(id SERIAL PRIMARY KEY
,name VARCHAR(12) NOT NULL
,email VARCHAR(25) NOT NULL
,department VARCHAR(50) NULL
,branch VARCHAR(50) NULL
);
INSERT INTO my_table VALUES
(1,'John','john@test.ca','Information Technology','SAP'),
(2,'John','john@test.ca',NULL,NULL),
(3,'Bret','brett@test.ca','Emergency Response','911'),
(4,'Bret','brett@test.ca',NULL,NULL),
(5,'diana','diana@test.ca',NULL,NULL);
SELECT name
, email
, MAX(department) department
, MAX(branch) branch
FROM my_table
GROUP
BY name
, email;
+-------+---------------+------------------------+--------+
| name | email | department | branch |
+-------+---------------+------------------------+--------+
| Bret | brett@test.ca | Emergency Response | 911 |
| diana | diana@test.ca | NULL | NULL |
| John | john@test.ca | Information Technology | SAP |
+-------+---------------+------------------------+--------+
请参阅。结果:
此示例数据需要一个<代码>案例<代码>表达式来检查<代码> >不可用'< /代码>,并将其视为<代码> null <代码>,这样您就可以聚合(用<代码> min <代码>或<代码> max >代码>):
请参阅。结果:
有人可能会证明我错了,但我不相信你能在SQL中做到这一点。您需要检索数据,然后使用一些编程来对结果进行按摩。您可以在SQL中执行此操作,但是考虑将“不可用”存储为NulLad可能会证明我错了,但我不相信您可以在SQL中这样做。您需要检索数据,然后使用一些编程来对结果进行按摩。您可以在SQL中这样做,但是考虑将“不可用”存储为空。
select name, email,
coalesce(
max(case when department = 'Not Available' then null else department end),
'Not Available'
) department,
coalesce(
max(case when branch = 'Not Available' then null else branch end),
'Not Available'
) branch
from tablename
group by name, email
| name | email | department | branch |
| ----- | ------------- | ---------------------- | ------------- |
| Bret | brett@test.ca | Emergency Response | 911 |
| diana | diana@test.ca | Not Available | Not Available |
| John | john@test.ca | Information Technology | SAP |