【问题标题】:MySQL GROUP BY with substring not looping throughMySQL GROUP BY,子字符串不循环
【发布时间】:2012-07-22 18:57:16
【问题描述】:

我正在尝试按子字符串分组。我只得到一个结果:

Region = Coastal, Value (R) = 1144900.

我应该得到 2 个结果。

这是我的代码:

SELECT
  DISTINCT SUBSTRING_INDEX(`team_name`, '-', 1) AS 'Region', 
  SUM(`opportunities`.`value`) AS 'Value (R)'
FROM 
  `opportunities` 
  LEFT JOIN cf_type_link_data ON cf_type_link_data.sourceid = opportunities.id
  LEFT JOIN cf_lu_type_fields ON cf_type_link_data.fieldid = cf_lu_type_fields.id
  LEFT JOIN cf_lu_types_fields_dropdown ON cf_type_link_data.`value` = cf_lu_types_fields_dropdown.id AND cf_lu_type_fields.id = cf_lu_types_fields_dropdown.fieldid
  LEFT JOIN `lu_teams` ON `lu_teams`.`contactid` = `opportunities`.`user_allocation`
  LEFT JOIN `teams` ON `teams`.`id` = `lu_teams`.`teamid`
  LEFT JOIN `lu_opportunity_status` ON `lu_opportunity_status`.`id` = `opportunities`.`status`
WHERE 1 
  AND `cf_lu_types_fields_dropdown`.`values` = 'Building Project'
  AND cf_lu_type_fields.fieldname = 'Scaffolding Segment'
  AND (`opportunities`.`expecteddate` >= '2012-01-01' AND `opportunities`.`expecteddate` <= '2012-07-24')
GROUP BY 'Region' 
ORDER BY cf_lu_types_fields_dropdown.`values`;

感谢任何帮助。

【问题讨论】:

  • 我们需要看一个你的表格数据的例子。

标签: mysql group-by substring


【解决方案1】:

你不能在GROUP BY子句中使用相同的别名

试试

SELECT DISTINCT SUBSTRING_INDEX(team_name, '-', 1) AS 'Region', 
       SUM(opportunities.value) AS 'Value (R)'....

GROUP BY SUBSTRING_INDEX(team_name, '-', 1)
ORDER BY cf_lu_types_fields_dropdown.values;

【讨论】:

  • 是的,MySQL 允许这样做,这与 SQL Server 不同。
  • 我得到了两个结果,但现在的问题是,在作为结果之一的 Coastal 中,假设在 Coastal 中有 2 个结果(值是 903400 但应该是 1144900,因为它缺少另一个结果) 但它只得到 1。
【解决方案2】:

尽量不要在字段标识符中使用引号 -

'地区' -> 地区

在您的情况下,您在结果数据集中只看到一条记录,因为您按字符串“区域”分组,但您应该按值分组。

【讨论】:

  • 如果我按值分组,我仍然得到 1 个结果。
  • 然后您的查询返回一个值。检查此值 - SUBSTRING_INDEX(team_name, '-', 1),检查 WHERE 条件。
  • 我知道它返回 2 个值。因为我可以看到结果。上面的答案有效,除了 2 个结果中的每一个中有多个结果,但它只返回 1。
  • 你能显示你编辑的查询吗?如果SUBSTRING_INDEX(team_name, '-', 1) 返回两个不同的值并且 WHERE 过滤器是正确的,那么您必须按预期获得 2 条记录。检查一切是否正确。
猜你喜欢
  • 1970-01-01
  • 2020-01-17
  • 2019-07-29
  • 1970-01-01
  • 2010-09-14
  • 2013-02-22
  • 1970-01-01
  • 2020-06-30
  • 1970-01-01
相关资源
最近更新 更多