【问题标题】:Get desired output using sql considering high performance?考虑到高性能,使用 sql 获得所需的输出?
【发布时间】: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 标记。

标签: mysql sql performance


【解决方案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 子句中使用列别名进行过滤。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多