【问题标题】:Use GROUP BY/ HAVING, but then expand the results使用 GROUP BY/HAVING,然后扩展结果
【发布时间】:2015-02-18 16:05:17
【问题描述】:

我不确定我的标题问题是否有意义。但我有以下查询。

SELECT mdn,
       cost_center, 
       sum(data_allowance) AS allowance, 
       sum(mib) AS 'sum_usage', 
       rate_plan 
FROM verizon 
GROUP by cost_center
HAVING SUM(mib) > SUM(data_allowance);

这给了我超出允许范围的数据。这是我想要的信息,但每个成本中心都有多行相关联。虽然每一行都可能没有结束,但我仍然想SELECT那些行。另一方面,有些行可能超过了他们的限额,但总的来说,他们没有超过他们的限额,我不想显示该信息。

希望这很清楚,并提前感谢您。

【问题讨论】:

  • 我说得对吗:您想添加一些未超出限额的成本中心并排除一些超出限额的成本中心?
  • 是的,但我想包括的那些是总共SUM(mib) > SUM(data_allowance) 我想排除那些总共没有结束的。这有意义吗?
  • 我认为这正是您的代码现在所做的。您在 AS 'sum_usage' 处有语法错误,这就是我所看到的。
  • 这里没有语法错误。然而,虽然 MySQL 允许省略,但一般来说,SELECT 子句中包含的任何非聚合列也必须包含在 GROUP BY 子句中。
  • 不,没有语法错误,查询有效。每个成本中心都有几条不同的线路。这导致我尝试GROUP BY cost_center, line,但这并没有给我结果。现在我想我需要对WHERE cost_center IN ( .. 使用子查询,我将尝试做一点

标签: mysql group-by having


【解决方案1】:

您是否要获取与成本中心相关的详细信息?如果是这样,那么使用join

SELECT v.*
FROM verizon v JOIN
     (SELECT cost_center
      FROM verizon 
      GROUP BY cost_center
      HAVING SUM(mib) > SUM(data_allowance)
     ) vsum
     ON v.cost_center = vsum.cost_center;

如果您还想要汇总值,可以将其包含在 vsum 子查询中并选择汇总值。

【讨论】:

  • 额外建议加 1。这也会有帮助
猜你喜欢
  • 2016-11-12
  • 1970-01-01
  • 2014-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多