1

希望标题没有吓跑所有人,因为我不知道该怎么说。

我试图找出一个 MySQL 查询,它可以解析上面的信息表并提供如下输出:

sID | ID | Opt1 Total | Opt2 Total

Opt1 Total = 仅在 Opt1=Yes 时才进行 SUM
Opt2 Total = 仅在 Opt2=Yes 时才进行 SUM

并且需要按 ID 列分组。

+--------------+--------+------------+------+------------+-----------+
| sID          | amount | status     | Opt1 | Opt2   | ID        |
+--------------+--------+------------+------+------------+-----------+
| 101241103181 |  61.75 | Successful | No   | No         | 21665870  |
| 101241103181 |  51.50 | Successful | No   | No         | 21665870  |
| 101241103181 |  77.90 | Successful | No   | Yes        | 21665870  |
| 101241103181 |  71.50 | Successful | No   | Yes        | 21665870  |
| 101241103181 | 111.14 | Successful | No   | No         | 21665870  |
| 101130103181 | 126.14 | Failed     | No   | No         | 21665870  |
| 101130103181 | 111.37 | Successful | No   | No         | 21665870  |
| 101130103181 |  40.25 | Successful | Yes  | No         | 21665870  |
| 101130103181 | 118.50 | Successful | No   | No         | 21665870  |
| 101110103181 |  43.62 | Successful | Yes  | No         | 21665870  |
| 101241103181 |  69.22 | Successful | No   | No         | 40170467  |
| 101241103181 | 128.88 | Successful | No   | No         | 40170467  |
| 101276103181 |  92.27 | Successful | Yes  | No         | 40170467  |
| 101276103181 |  92.27 | Successful | Yes  | No         | 40170467  |
| 101241103181 | 217.36 | Successful | No   | No         | 40170467  |
| 101241103181 |  40.69 | Successful | No   | No         | 40170467  |
| 101241103181 |  82.68 | Successful | No   | No         | 40170467  |

如果不对每一位信息重复进行多次选择,我就无法为我的一生制定一个查询来使其正常工作。这个表很快就会有 100,000 条记录,所以这还不够。

希望有人可以帮助比我更了解MySQL的人。

4

1 回答 1

1

尝试:

SELECT sID,
       ID,
       Sum(CASE
             WHEN Opt1 = 'Yes' THEN Amount
             ELSE 0
           end) AS Opt1Total,
       Sum(CASE
             WHEN Opt2 = 'Yes' THEN Amount
             ELSE 0
           end) AS Opt2Total
FROM   yourTable
GROUP  BY sID,
          ID  

或者仅GROUP BY ID当您只需要每个 ID 一行时(但您会丢失一些 sID 信息)。

请参阅显示两个输出的这个小提琴。小数的差异是由于浮点精度问题

于 2013-08-01T13:31:17.710 回答