【问题标题】:CONCAT rows and return within GROUPCONCAT 行并在 GROUP 内返回
【发布时间】:2012-06-29 12:30:57
【问题描述】:

我有以下SQLFiddle,我可以按时间、计数和名称对结果进行分组,但我也想在同一行中返回error_strings。

有什么建议吗?组 concat 并没有真正做我需要的。

我希望输出看起来像:

NAME | TIME | TODAYSCOUNT  | ERRORS
------------------------------------
A     1111           2000  error1,erro2
B     1111             20  error1,erro2
C     1111             10  error1,erro2
D     1111              3  error1,erro2

【问题讨论】:

  • 您在寻找什么样的输出?你想做什么 group_concat 没有完成?
  • 也许您可以向我们展示您想要的示例输出。
  • 我们还需要您的样本输出。
  • 样本输出与表数据有何关系?不仅错误字符串似乎被截断,而且还不清楚TODAYSCOUNT 是什么或记录是如何分组的。请澄清。
  • 就像我说的,这只是一个示例。如果我知道该怎么做,我就不会截断错误。例如今天的时间是 1111,昨天的时间是 3111。

标签: mysql group-by concat


【解决方案1】:

下面的怎么样:-

http://sqlfiddle.com/#!2/4c5e4/20

SELECT name,time,count(*) as todaycount, group_concat(error_str) as errors  
FROM test 
GROUP BY Name,time

你可以改成

group_concat(distinct error_str)

用于不同的错误字符串。

【讨论】:

    【解决方案2】:

    看看这个:

    http://sqlfiddle.com/#!2/d6929/2

    我向前迈了一步,因为看起来您可能会走到这一步:

    SELECT Name, FROM_UNIXTIME('%m-%d-%Y', SUM(TodaysDate)),FROM_UNIXTIME('%m-%d-%Y',SUM(YesterdaysDate)), sum(TodaysCount),Sum(YesterdaysCount),CONCAT(String),CONCAT(String2)
    FROM (
        SELECT Name,Time as TodaysDate,0 as YesterdaysDate,COUNT(*) as TodaysCount, 0 as YesterdaysCount,GROUP_CONCAT(error_str) as String, '' as String2
        FROM Test
        WHERE Time = 3111
        GROUP BY Name
      UNION ALL
        SELECT Name,0 as TodaysDate,Time as YesterdaysDate,0 as TodaysCount, COUNT(*)  as YesterdaysCount, '' as String, GROUP_CONCAT(error_str) as String2
        FROM Test
        WHERE Time = 1111
        GROUP BY Name
      ) as t
    GROUP BY Name
    

    上面用到的联合

    【讨论】:

      猜你喜欢
      • 2021-03-21
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 2016-03-06
      • 2012-10-02
      • 2018-09-02
      • 1970-01-01
      • 2011-09-22
      相关资源
      最近更新 更多