Mysql 查询未返回预期结果?

Mysql 查询未返回预期结果?,mysql,sql,laravel,Mysql,Sql,Laravel,我有两张桌子: 1) 报告详情 2) 报告 查询: SELECT COUNT(channel),DATE_FORMAT(date,'%d/%m/%Y') AS niceDate, channel FROM `report_details` JOIN report on report.report_id=report_details.report_id where report.report_hash='abcd' GROUP BY channel,niceDate; 输出 预期

我有两张桌子:

1) 报告详情

2) 报告

查询:

SELECT COUNT(channel),DATE_FORMAT(date,'%d/%m/%Y') AS niceDate,
    channel FROM `report_details`
JOIN report on report.report_id=report_details.report_id
where report.report_hash='abcd'
GROUP BY  channel,niceDate;
输出

预期产出

使用以下功能:

SELECT GROUP_CONCAT(COUNT),GROUP_CONCAT(channel)channel,niceDate FROM
(
    SELECT COUNT(channel)COUNT, DATE_FORMAT(date, '%d/%m/%Y') AS niceDate,channel 
    FROM `report_details` 
    JOIN report ON report.report_id = report_details.report_id 
    WHERE report.report_hash = 'abcd' 
    GROUP BY niceDate,channel 
)Z
GROUP BY niceDate ;
问题: 据我所知,您的查询中存在一个问题,似乎您需要的不仅仅是一个简单的groupby,因为您需要一个聚合。因此,您可能希望使用GROUP_CONCAT()来获取您的香奈儿,但如果您希望将同一日期的所有香奈儿分组到一行中,但使用分隔符,则需要一个内部选择

修改的查询

SELECT GROUP_CONCAT(cnt),niceDate,GROUP_CONCAT(channel)channel FROM
(
  SELECT COUNT(channel) as cnt ,DATE_FORMAT(date,'%d/%m/%Y')
  AS  niceDate,group_concat(channel) channel
  FROM `report_details` JOIN report on report.report_id=report_details.report_id
  where report.report_hash='abcd' GROUP BY  chanel,niceDate
) f
GROUP BY niceDate ;
解释

  • 我将第一个查询作为一个内部选择,这样您就可以在一行上有相同日期的所有通道,您不能在一个选择中进行查询,因为Group_Concat不能在内部进行计数,除非它来自一个内部选择,如本例所示
  • 我添加了group_concat(香奈儿)的用法,这样您就可以得到香奈儿的列表,而不是为每个列表单独列出一行
如果您想了解有关group_concat的更多信息,请访问以下文档链接:

请求帮助时,请直截了当,切中要害。“请帮帮我”和悲伤表情等信息都是乞讨的形式,这在接近志愿者时并不理想。理想情况下,如果你能解释你试图解决问题的方法,这也是一个好办法——我们这里每天都有很多人尝试了五分钟,然后很快就放弃了。别做那种人!一个好的答案总会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的SO访客。这似乎是一个SQL问题的Laravel答案?@halfer公平地说,这个问题被标记为well@ChrisForrence:是的,但OP似乎在尝试SQL,因此,虽然这可能会有所帮助,但它并不能解释OP的问题
:-)
properly@midhunk我用一个内部选择更新了代码,所以告诉我works@Chris我的另一句话是什么?请不要在你的答案中加上“希望这有帮助”——因为从来没有人希望它没有帮助,这是完全多余的。你似乎添加了这个,这对一个志愿者编辑来说是一个很大的清理。@SagarGangwal使用的语言(“…可以试试上面的…”,“希望这会有帮助”)削弱了你的答案;这让它看起来更像是猜测。@ChrisForrence好的,ChrisForrence,我明白了。。!!特别感谢
SELECT GROUP_CONCAT(cnt),niceDate,GROUP_CONCAT(channel)channel FROM
(
  SELECT COUNT(channel) as cnt ,DATE_FORMAT(date,'%d/%m/%Y')
  AS  niceDate,group_concat(channel) channel
  FROM `report_details` JOIN report on report.report_id=report_details.report_id
  where report.report_hash='abcd' GROUP BY  chanel,niceDate
) f
GROUP BY niceDate ;