【问题标题】:MySQL Group By RowMySQL 按行分组
【发布时间】:2014-03-03 12:42:23
【问题描述】:

我有一张如下所示的表格:


Associate Pay_Code Hours    Site    Date       Week     Year
Bill    REG  8.0    US  3/3/2014    10      2014
Bill    REG  8.0    US  3/4/2014    10      2014
Bill    REG  8.0    US  3/5/2014    10      2014
Bill    REG  8.0    US  3/6/2014    10      2014
Bill    VTO  6.0    US  3/7/2014    10      2014
Bill    PERS 2.0    US  3/7/2014    10      2014
Mary    REG  8.0    Canada  3/3/2014    10      2014
Mary    REG  8.0    Canada  3/4/2014    10      2014
Mary    REG  8.0    Canada  3/5/2014    10      2014
Mary    REG  8.0    Canada  3/6/2014    10      2014
Mary    REG  6.0    Canada  3/7/2014    10      2014
Mary    PERS 2.0    Canada  3/7/2014    10      2014
Fred    REG  8.0    England 3/3/2014    10      2014
Fred    REG  8.0    England 3/4/2014    10      2014
Fred    REG  8.0    England 3/5/2014    10      2014
Fred    REG  8.0    England 3/6/2014    10      2014
Fred    REG  8.0    England 3/7/2014    10      2014
Wilma   REG  8.0    Jamaica 3/3/2014    10      2014
Wilma   REG  8.0    Jamaica 3/4/2014    10      2014
Wilma   REG  8.0    Jamaica 3/5/2014    10      2014
Wilma   REG  8.0    Jamaica 3/6/2014    10      2014
Wilma   REG  8.0    Jamaica 3/7/2014    10      2014
Wilma   OT   5.0    Jamaica 3/7/2014    10      2014
Jethro  REG  8.0    Africa  3/3/2014    10      2014
Jethro  REG  8.0    Africa  3/4/2014    10      2014
Jethro  REG  8.0    Africa  3/5/2014    10      2014
Jethro  REG  8.0    Africa  3/6/2014    10      2014
Jethro  REG  8.0    Africa  3/7/2014    10      2014
Jethro  OT   8.0    Africa  3/7/2014    10      2014
Frank   REG  8.0    Iraq    3/3/2014    10      2014
Frank   PERS 8.0    Iraq    3/4/2014    10      2014
Frank   PERS 8.0    Iraq    3/5/2014    10      2014
Frank   VACP 8.0    Iraq    3/6/2014    10      2014
Frank   VACP 8.0    Iraq    3/7/2014    10      2014

这个查询:

SELECT Pay_Code, Site, SUM(Hours), Week(Date,4), YEAR(Date)

FROM table

GROUP BY Pay_Code, Site, YEAR(Date), WEEK(Date,4)

给我:

Pay Code    Site    Sum of Hours     Week     Year
OT          Africa   8.0             10      2014 
            Jamaica  5.0             10      2014 
PERS        Canada   2.0             10      2014 
            Iraq     16.0             10      2014 
            US       2.0             10      2014 
REG         Africa   40.0             10      2014 
            Canada   38.0             10      2014 
            England  40.0             10      2014 
            Iraq     8.0             10      2014 
            Jamaica  40.0             10      2014 
            US       32.0             10      2014 
VACP        Iraq     16.0             10      2014 
VTO         US       6.0             10      2014 

我想做的是对 Pay_Code 组进行分组,以便进一步汇总它们。看起来像这样的东西:

Pay Code2           Pay Code    Site    Sum of Hours      Week     Year
OT                  OT          Africa   8.0              10      2014
                                Jamaica  5.0              10      2014
Paid Shrink         PERS        Canada   2.0              10      2014
                                Iraq     16.0             10      2014
                                US       2.0              10      2014
                    VACP        Iraq     16.0              10      2014
REG                 REG         Africa   40.0              10      2014
                                Canada   38.0              10      2014
                                England  40.0              10      2014
                                Iraq     8.0              10      2014
                                Jamaica  40.0              10      2014
                                US       32.0              10      2014
Unpaid Shrink       VTO             US       6.0             10      2014

目标是按站点、按周报告 Pay_Code2 字段,但表中不存在 Pay_Code2 字段。现在我查询大量数据并使用数据透视表对行进行分组。如果可能,我想在 MySQL 中执行此操作。

【问题讨论】:

  • 什么是Paid ShrinkREG REGUnpaid Shrink
  • 为什么不添加“pay_code_2”列或查找表?
  • @pce - 我的表中有 RO,所以我不能添加任何字段。我不知道设置组的 MySQL 方法,即 Paid Shrink = VACP + PERS、Unpaid Shrink = VTO + LOA 等。
  • @bluefeet - Pay_Code2 标题下的所有项目都是分组行。例如,Paid Shrink = VACP + PERS、REG = REG、OT = OT、Unpaid Shrink = VTO + LOA + BER 等。目前我正在使用数据透视表将行分组在一起。如果可能,我想使用 MySQL 代码执行此操作,以便在数据库服务器上完成工作,并且查询不会返回太多数据。

标签: mysql sql group-by pivot-table summarization


【解决方案1】:

听起来您正在尝试根据 PayCode 值创建一个新类别。你可以试试这样的:

SELECT CASE
         WHEN Pay_Code = 'OT' THEN 'OT'
         WHEN Pay_Code IN ('VACP','PERS') THEN 'Paid Shrink'
         WHEN Pay_Code = 'REG' THEN 'REG'
         WHEN Pay_Code IN ('VTO','LOA','BER') THEN 'Unpaid Shrink'
         ELSE 'Unknown'
       END as PayCode_2
       ,YEAR(Date), WEEK(Date,4), SUM(Hours), Site, Pay_Code
FROM table
GROUP BY PayCode_2, Pay_Code, Site, YEAR(Date), WEEK(Date,4)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    相关资源
    最近更新 更多