【问题标题】:SQL Combining fields in one tableSQL 合并一个表中的字段
【发布时间】:2020-03-22 13:37:18
【问题描述】:

有一个显示两个表格的脚本。 String 类型的名称和 Long 类型的计数。 如何将相同的字段“缺货”合并到一个字段中,将“婚姻”、“重新排序”字段合并到一个字段中的“婚姻/重新排序”中。这样做时,保存两个表的类型,并在新字段中获取组合值。以及如何不显示额外的字段,例如员工表格等。 我知道您可以使用 CASE、WHEN、THEN 结构。但我不明白如何在我的脚本中正确描述它。

SELECT rl.reason AS reject_reason, COUNT(*)
FROM
    mp.reservation_log AS rl
    JOIN
    mp.store AS st ON rl.store_id = st.md_id
    JOIN mp.order_item oi ON oi.reserve_id=rl.reservation_id
    JOIN mp.sku s ON s.id=oi.item_id
    JOIN mp.product p ON p.id=s.product_id
WHERE rl.created_at > DATE(NOW()) - INTERVAL 1 MONTH AND rl.is_successful=0
GROUP BY rl.reason;

表格示例:

table example

【问题讨论】:

  • 样本数据和期望的结果将有助于您的问题变得有意义。您的查询中没有任何内容被称为“婚姻”或“缺货”或其他任何内容,因此完全不清楚您指的是什么。此外,您的第一句话说“两个表”,但您的查询引用了 五个
  • 更多表是的,我附上了需要更改的输出。注意这一点。
  • 即使在您附加输出之后(不要在图片中这样做!),目前还不清楚您对问题Nothing in your query is called "marriage" or "out of stock" or whatever, so it is totally unclear what you are referring to.的答案是什么
  • 我从表格中得到这些字段的原因,是不是更清楚了?

标签: mysql sql group-by sql-scripts


【解决方案1】:

似乎您想将多个原因组合在同一个组中。

您可以为此使用 case 表达式作为非聚合列,如下所示:

select
    case 
        when r1.reason in ('marriage', 're-sorting') then 'marriage/re-sorting'
        else r1.reason
    end real_reason,
    count(*) cnt
from ...
where rl.created_at > current_date - interval 1 month and rl.is_successful = 0
group by real_reason

旁注:DATE(NOW()) 最好写成 CURRENT_DATE 。

【讨论】:

  • 你能帮我把这个和我的要求结合起来吗?我经常犯很多错误
  • @skydogs:您只需将我的答案中的... 替换为您的from 子句(包括joins)。
猜你喜欢
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
  • 2015-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多