所以我有下表,例如
|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时,才能显示组。
因此,产出应该是:
|Company Name | Weight | Date |Unique ID|
|:------------|:-------|:-----|:--------|
|ABC |22 |10-3 |1 |
|ABC |22 |10-3 |2 |
|DEF |100 |10-3 |GROUP |
目前,我正在尝试以下操作,但接收到组的无效使用
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);
发布于 2016-10-03 20:11:04
看起来,您的意思是希望将sum(权重)< 100的组包含到单个组中。
为此,我将在派生表子查询中执行第一个组,然后在外部查询的表达式中引用该和:
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;
发布于 2016-10-03 20:26:32
我在想这样的事情:
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
发布于 2016-10-03 23:40:34
这里有一种方法:(麦克斯(约会),因为你没有提到你是如何为团体做的)
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
https://stackoverflow.com/questions/39839574
复制相似问题