考虑到高性能,使用 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 获得所需的输出?的主要内容,如果未能解决你的问题,请参考以下文章

Python多线程未获得所需的性能

无法在官方 MySQL 连接器中获得所需的输出

无法获得所需的掩码检测输出

054_Ajax 01

如何使gRPC 获得最佳性能?

增加性能计数器所需的权限