考虑到高性能,使用 sql 获得所需的输出?
Posted
技术标签:
【中文标题】考虑到高性能,使用 sql 获得所需的输出?【英文标题】:Get desired output using sql considering high performance? 【发布时间】:2020-01-21 19:15:29 【问题描述】:我有一个表用户:
CREATE TABLE `users` (
`ID` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`password` varchar(25) NOT NULL,
`email` varchar(100) DEFAULT NULL,
`contact` varchar(50) NOT NULL,
`dob` varchar(100) DEFAULT NULL,
`gender` varchar(50) DEFAULT '',
`address` varchar(100) DEFAULT '',
`city` varchar(100) DEFAULT '',
`state` varchar(100) DEFAULT '',
`pin` varchar(100) DEFAULT '',
`country` varchar(100) NOT NULL DEFAULT 'India',
`pic` varchar(255) DEFAULT NULL,
`gst_number` varchar(50) DEFAULT NULL,
`utype` varchar(20) NOT NULL DEFAULT 'user',
`creating_date` datetime NOT NULL,
`status` char(1) DEFAULT '1',
PRIMARY KEY (`ID`),
UNIQUE KEY `email` (`email`)
);
我使用上表中的某些条件获得多个集合 ID,例如
id-(1,2) using criteria1
id-(1,3) using criteria2
id-(3,5) using criteria3
现在我想在单个查询中显示名称、城市和 CriteriaApplicable,以便获得唯一的行
想要的输出如:
id name criteriaApplicable
1 Rahul criteria1, criteria2
2 Tarun criteria2
3 Rishabh criteria2,criteria3
5 Krishna criteria3
【问题讨论】:
mysql 还是 SQL Server? @JiteshAgrawal 。 . .代码显然是 MySQL,所以我删除了 SQL Server 标记。 【参考方案1】:使用case
表达式和concat_ws()
组合它们:
select id,
concat_ws(',',
(case when criteria_1 then 'criteria_1' end),
(case when criteria_2 then 'criteria_2' end),
(case when criteria_3 then 'criteria_3' end)
) as criteriaApplicable
from users u
having criteriaApplicable <> '';
这使用了 MySQL 的扩展,允许在 HAVING
子句中使用列别名进行过滤。
【讨论】:
以上是关于考虑到高性能,使用 sql 获得所需的输出?的主要内容,如果未能解决你的问题,请参考以下文章