鉴于以下表格信息:
A B C D E
1 786788 123.45 0 617
2 786788 654.21 0 3271
3 786788 111.11 0 556
4 786788 224.45 0 1122
5 786788 0.12 12 0
6 786788 3.21 321 0
7 786788 0.22 22 0
8 786788 0.33 33 0
9 786788 757.57 0 3788
10 786788 545.41 0 2727
11 786788 0.07 7 0
12 786788 0.05 5 0
13 786790 50 0 125
14 786790 50 0 125
15 786790 50 0 125
16 786790 50 0 125
17 786790 50 0 125
18 786788 1.23 0 6
19 786788 0.12 0 1
20 786788 0.12 0 1
21 786788 0.05 0 0
22 786788 0.55 0 3
23 786788 0.45 45 0
24 786788 1.47 0 7
25 786788 0.41 0 2
26 786788 0.74 74 0
27 786788 100 0 500
36 786788 5 0 25
37 786788 24 0 120
38 786788 23 0 115
39 786788 1.47 0 7
40 786788 12 0 60
41 786788 14 0 70
43 786222 7.8 0 39
44 786222 0.12 12 0
45 786788 47.47 0 237
46 786788 9.89 989 0
47 786788 1.23 0 6
48 786788 1.23 0 6
我正在尝试在一个查询中获取以下信息:
如果一切顺利,结果应该看起来像这个例子(我没有“SUM”所有例子):
786788 32 SUM(column C) WHERE column E != 0 SUM(column D) SUM(column E)
786790 5 SUM(column C) WHERE column E != 0 SUM(column D) SUM(column E)
786222 2 SUM(column C) WHERE column E != 0 SUM(column D) SUM(column E)
答案 0 :(得分:2)
除非我弄错了,否则您建议的字段列表与您在查询中实际需要的内容非常接近。我没有对此进行过测试,但是给它一个镜头(它使用MySQL的GROUP BY
来执行你需要的DISTINCT
/分组):
SELECT
B,
COUNT(*),
SUM((CASE WHEN E != 0 THEN C ELSE 0 END)),
SUM(D),
SUM(E)
FROM
your_table
GROUP BY B
答案 1 :(得分:1)
我不清楚你是否希望在中的每个值中的SUM 或整个表中的每个值重复。如果是前者(这对我来说最有意义),我认为这几乎是你想要的:
SELECT B, COUNT(*), SUM(IF(E = 0, 0, C)), SUM(D), SUM(E)
FROM FollowingTable GROUP BY B
答案 2 :(得分:0)
这是工作吗?
select b, count(b),sum(case e when 0 then 0 else c end), sum(d), sum(e) from test01 group by b