【问题标题】:Group by a Substring mysql not working按子字符串分组 mysql 不起作用
【发布时间】:2014-01-10 08:45:43
【问题描述】:

我想在查询中使用 GROUP BY 子句,以防 IFF 它的列 TYPE 包含 [Sale],为此我将查询放在下面,

SELECT 
   PAYABLE_TYPE AS TYPE,
   CASE WHEN (SUBSTRING(PAYABLE_TYPE, 1,6) = '[Sale]') THEN PAYABLE_TYPE END AS T,
   PAYABLE_PARTICULAR AS PARTICULAR,
   DEBIT,
   CREDIT,
   PAYABLE_DATE AS DATE
FROM PAYABLES
WHERE PAYABLE_DATE >= $P{DateStart} && PAYABLE_DATE <= $P{DateEnd}
GROUP BY T

但它只返回 2 行,我所拥有的在下图中,绿色框线显示了我需要分组的内容。我还需要将分组总数汇总在那里。谢谢

【问题讨论】:

  • 你想要什么结果?查询工作正常,返回两行,type 是 '[Sales]' 和 NULL
  • 我需要根据 TYPE 列中的值 [Sale] 进行分组

标签: mysql group-by substring


【解决方案1】:

您希望按销售额分组,但保持其他行不变。让我假设您在每一行上都有一个唯一的id,它是一个非负整数:

SELECT 
   PAYABLE_TYPE AS TYPE,
   CASE WHEN (SUBSTRING(PAYABLE_TYPE, 1,6) = '[Sale]') THEN PAYABLE_TYPE END AS T,
   max(PAYABLE_PARTICULAR) AS PARTICULAR,
   sum(DEBIT) as debit,
   sum(CREDIT) as credit,
   PAYABLE_DATE AS DATE
FROM PAYABLES
WHERE PAYABLE_DATE >= $P{DateStart} && PAYABLE_DATE <= $P{DateEnd}
GROUP BY PAYABLE_DATE, (case WHEN (SUBSTRING(PAYABLE_TYPE, 1,6) = '[Sale]') then -1 else id end);

【讨论】:

  • 但是整体上只提供一条销售线,我需要在不同的日期范围内采用不同的方式,比如 SALE 只在 9 月 19 日完成。然后是 Stock In 等其他事情,然后在 23 日再做一次九月再次销售......
  • 我将payable_date添加到group by中,应该可以解决这个问题。
  • 谢谢伙计,它显示了 2 行,即使是 SEC 的日期差异,但我是用日期格式的东西做到的。谢谢!它工作:)
【解决方案2】:

查询中没有聚合函数。也许你正在尝试做这样的事情?

SELECT TYPE, T, PARTICULAR, DATE, SUM(DEBIT), SUM(CREDIT) FROM
(SELECT 
   PAYABLE_TYPE AS TYPE,
   CASE WHEN (SUBSTRING(PAYABLE_TYPE, 1,6) = '[Sale]') THEN PAYABLE_TYPE END AS T,
   PAYABLE_PARTICULAR AS PARTICULAR,
   DEBIT,
   CREDIT,
   PAYABLE_DATE AS DATE
FROM PAYABLES
WHERE PAYABLE_DATE >= $P{DateStart} && PAYABLE_DATE <= $P{DateEnd})
GROUP BY TYPE, T, PARTICULAR, DATE

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-08-04
  • 2014-02-07
  • 2012-07-15
  • 1970-01-01
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 2013-02-16
相关资源
最近更新 更多