首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按新创建的SQL列分组

按新创建的SQL列分组
EN

Stack Overflow用户
提问于 2021-11-02 02:19:54
回答 1查看 175关注 0票数 0

我创建了一个以另一列TYPE为条件的列。-1次TYPE=IN,1次TYPE=OUT

代码语言:javascript
复制
SELECT *, 
  CASE TYPE
     WHEN 'IN' THEN -1 
     WHEN 'OUT' THEN 1
  END AS TYPE_NUMERIC

FROM `SALES_TABLE` 

表如下:

代码语言:javascript
复制
ID     DATE         TYPE      QTY  

X100   2010-11-02   IN        1000
X100   2010-11-02   OUT       1000
X100   2010-11-02   OUT       1000
X100   2010-11-02   IN        1000
X100   2010-11-04   IN        1000
       ...

如何将数据按IDQTY分组,然后和TYPE_NUMERIC,选择最早的 Date计数每个组中的行数?

使用上面的示例表作为示例,预期的输出应该如下所示:

代码语言:javascript
复制
ID     QTY    SUM_TYPE_NUMERIC  first_DATE         TYPE      count_rows

X100   1000   0                 2010-11-02         IN        4
X100   1000   -1                2010-11-04         IN        1

任何建议都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-02 03:17:01

试试这个:

代码语言:javascript
复制
SELECT
    `ID`,
    `QTY`,
    SUM(IF(`TYPE` = 'IN', -1, IF(`TYPE` = 'OUT', 1, 0))) AS SUM_TYPE_NUMERIC,
    MIN(`DATE`) AS first_DATE,
    COUNT(*) AS count_rows
FROM `SALES_TABLE`
GROUP BY `ID`, `QTY`

如果不能使用IF()语句,则可以选择:

A-直接存储-1和1而不是'IN‘和'OUT’。这样,您的查询就简化了:

代码语言:javascript
复制
SELECT
    `ID`,
    `QTY`,
    SUM(`TYPE`) AS SUM_TYPE_NUMERIC,
    MIN(`DATE`) AS first_DATE,
    COUNT(*) AS count_rows
FROM `SALES_TABLE`
GROUP BY `ID`, `QTY`

TYPE_NUMERIC B-使用-1和1值添加字段(根据其TYPE值将此值分配给每个寄存器)。最后,我们的查询是:

代码语言:javascript
复制
SELECT
    `ID`,
    `QTY`,
    SUM(`TYPE_NUMERIC`) AS SUM_TYPE_NUMERIC,
    MIN(`DATE`) AS first_DATE,
    COUNT(*) AS count_rows
FROM `SALES_TABLE`
GROUP BY `ID`, `QTY`

TYPES -添加一个带有字段TYPETYPE_NUMERIC的表,它将包含两个寄存器:('IN',-1)和(OUT,1)。这是B选项的规范化。这样,您可以在查询中使用该表和TYPE_NUMERIC值:

代码语言:javascript
复制
SELECT
    s.`ID`,
    s.`QTY`,
    SUM(t.`TYPE_NUMERIC`) AS SUM_TYPE_NUMERIC,
    MIN(s.`DATE`) AS first_DATE,
    COUNT(*) AS count_rows
FROM `SALES_TABLE` s
JOIN `TYPES` t ON t.`TYPE` = s.`TYPE`
GROUP BY s.`ID`, s.`QTY`
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69804700

复制
相关文章

相似问题

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