【问题标题】:get result of 2 rows value in one row在一行中获取 2 行值的结果
【发布时间】:2018-07-11 13:16:51
【问题描述】:

连接查询的结果-

SELECT st_stock.name, st_stock.price, 
       FORMAT(st_stock.quantity,0), 
       st_stock.exp_date, 
       admin.username 
FROM `st_stock` 
  INNER JOIN `admin` ON FIND_IN_SET(admin.ID,st_stock.broker_id) AND st_stock.id='2'

样本数据

name        price     asjdb       exp_date            username
5.HK (HSBC) 74.40 HKD 100,000,000 2018-07-27 17:00:00 broker2
5.HK (HSBC) 74.40 HKD 100,000,000 2018-07-27 17:00:00 broker3

预期输出

 5.HK (HSBC) 74.40 HKD 100,000,000 2018-07-27 17:00:00 broker2,broker3

【问题讨论】:

  • 我的结果应该是--- 5.HK (HSBC) 74.40 HKD 100,000,000 2018-07-27 17:00:00 broker2,broker3
  • edit 你的问题。不要将附加信息添加为(未格式化的)cmets
  • 你有预期输出的列名吗?
  • 相同的列名

标签: mysql sql string-aggregation


【解决方案1】:

如果这是sql,

 SELECT st_stock.name, st_stock.price, 
           FORMAT(st_stock.quantity,0), 
           st_stock.exp_date, 
           GROUP_CONCAT(admin.username)
    FROM `st_stock` 
      INNER JOIN `admin` ON FIND_IN_SET(admin.ID,st_stock.broker_id) AND st_stock.id='2' GROUP BY st_stock.name

【讨论】:

  • @SmritimayDebnath 它的工作正常,对吧?确保你点击向上箭头投票好答案:D
【解决方案2】:

您没有指定正在使用的 SQL 引擎。当涉及到更高级的聚合和窗口函数时,实现因数据库引擎而异。

例如,在 PostgreSQL 中,您将使用 string_agg 聚合函数:

SELECT name, price, asjdb, exp_date, string_agg(username,',') AS username
FROM d
GROUP BY name, price, asjdb, exp_date;

对于您将使用的其他数据库引擎:

  1. 甲骨文:LISTAGG
  2. SQL 服务器:STRINGAGG
  3. MySQL:GROUP_CONCAT

进一步阅读: ListAGG in SQLSERVER

【讨论】:

  • 感谢引擎标签!
猜你喜欢
  • 1970-01-01
  • 2021-09-25
  • 1970-01-01
  • 2021-01-30
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 2015-11-21
  • 2015-11-08
相关资源
最近更新 更多