首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果条件为Met,则为组列,否则,不要分组

如果条件为Met,则为组列,否则,不要分组
EN

Stack Overflow用户
提问于 2016-10-03 20:06:56
回答 3查看 60关注 0票数 1

所以我有下表,例如

代码语言:javascript
运行
复制
|Company Name | Weight | Date |Unique ID|
|:------------|:-------|:-----|:--------|
|ABC          |22      |10-3  |1        |
|ABC          |22      |10-3  |2        |
|DEF          |50      |10-3  |3        |
|DEF          |50      |10-3  |4        |

我需要SELECT语句,只有当组的和(权重)是>=100时,才能显示组。

因此,产出应该是:

代码语言:javascript
运行
复制
|Company Name | Weight | Date |Unique ID|
|:------------|:-------|:-----|:--------|
|ABC          |22      |10-3  |1        |
|ABC          |22      |10-3  |2        |
|DEF          |100     |10-3  |GROUP    |

目前,我正在尝试以下操作,但接收到组的无效使用

代码语言:javascript
运行
复制
SELECT COMPANY_NAME, DATE,
 (CASE WHEN SUM(WEIGHT) >= 100 THEN 'GROUP' ELSE UNIQUE_ID END) AS
  GROUP_CRITERIA 
  FROM TABLE GROUP BY COMPANY_NAME, DATE, 
  (CASE WHEN SUM(WEIGHT) >= 100 THEN 'GROUP' ELSE UNIQUE_ID END);
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-10-03 20:11:04

看起来,您的意思是希望将sum(权重)< 100的组包含到单个组中。

为此,我将在派生表子查询中执行第一个组,然后在外部查询的表达式中引用该和:

代码语言:javascript
运行
复制
SELECT 
  CASE WHEN TOTAL_WEIGHT >= 100 THEN COMPANY_NAME ELSE 'GROUP' END AS COMPANY_NAME,
  DATE,
  SUM(TOTAL_WEIGHT) AS TOTAL_WEIGHT
FROM (
  SELECT COMPANY_NAME, DATE, SUM(WEIGHT) AS TOTAL_WEIGHT
  FROM MyTable
  GROUP BY COMPANY_NAME, DATE
) AS T
GROUP BY COMPANY_NAME, DATE;
票数 1
EN

Stack Overflow用户

发布于 2016-10-03 20:26:32

我在想这样的事情:

代码语言:javascript
运行
复制
SELECT DISTINCT T1.company_name, IFNULL(T2.weight, T1.weight) AS weight, IFNULL(T2.date, T1.date) AS "date", IF(T2.company_name IS NULL, T1.unique_id, T2.unique_id)
FROM table T1
LEFT OUTER JOIN (
    SELECT company_name, `date`, SUM(weight) AS weight
    FROM table
    GROUP BY company_name
    HAVING SUM(weight) >= 100) T2 ON T2.company_name = T1.company_name
票数 0
EN

Stack Overflow用户

发布于 2016-10-03 23:40:34

这里有一种方法:(麦克斯(约会),因为你没有提到你是如何为团体做的)

代码语言:javascript
运行
复制
SELECT COMPANY_NAME, DATE, WEIGHT, UNIQUE_ID
FROM TABLE
WHERE COMPANY_NAME in 
  ( SELECT COMPANY_NAME FROM 
    (SELECT COMPANY_NAME, SUM(WEIGHT) FROM TABLE GROUP BY COMPANY_NAME
      HAVING SUM(WEIGHT) < 100) u)

UNION

SELECT COMPANY_NAME, MAX(DATE), SUM(WEIGHT), 'GROUP'
FROM TABLE
WHERE COMPANY_NAME not in 
  ( SELECT COMPANY_NAME FROM (SELECT COMPANY_NAME, SUM(WEIGHT) FROM TABLE GROUP BY COMPANY_NAME
    HAVING SUM(WEIGHT) < 100) u)

GROUP BY COMPANY_NAME
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39839574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档