【发布时间】:2014-11-14 18:15:26
【问题描述】:
这是一个表格布局示例:
TABLE_A: TABLE_B: TABLE_A_B:
id | a | b | c id | name a_id | b_id
--------------------- --------- -----------
1 | true | X | A 1 | A 1 | 1
2 | true | Z | null 2 | B 1 | 2
3 | false | X | null 3 | C 2 | 2
4 | true | Y | Q 4 | 1
5 | false | null | null 4 | 2
5 | 1
可能的值:
- TABLE_A.a:真,假
- TABLE_A.b:X、Y、Z
- TABLE_A.c:A、B、C……基本上是任意的
- TABLE_B.name: A, B, C, ... 基本上是任意的
我想要达到的目标:
SELECT all rows from TABLE_A
SUM(where a = true),
SUM(where a = false),
SUM(where b = 'X'),
SUM(where b = 'Y'),
SUM(where b = 'Z'),
SUM(where b IS NULL),
and also get the SUMs for all distinct TABLE_A.c values.
and also get the SUMs for all those TABLE_A_B relations.
上面示例表的结果应如下所示:
aTrue | aFalse | bX | bY | bZ | bNull | cA | cQ | cNull | nameA | nameB | nameC
-------------------------------------------------------------------------------
3 | 2 | 2 | 1 | 1 | 1 | 1 | 1 | 3 | 3 | 3 | 0
到目前为止我做了什么:
SELECT
SUM(CASE WHEN a = true THEN 1 ELSE 0 END) AS aTrue,
SUM(CASE WHEN b = false THEN 1 ELSE 0 END) AS aFalse,
SUM(CASE WHEN b = 'X' THEN 1 ELSE 0 END) AS bX,
...
FROM TABLE_A
我有什么问题?
选择列TABLE_A.a 和TABLE_A.b 很容易,因为有固定数量的可能值。
但我不知道如何计算TABLE_A.c 的不同值。 JOINed TABLE_B 的问题基本相同,因为TABLE_B 中的值的数量是未知的,并且会随着时间而改变。
感谢您的帮助! :)
EDIT1:新的(首选)SQL 结果结构:
column | value | sum
----------------------------
TABLE_A.a | true | 3
TABLE_A.a | false | 2
TABLE_A.b | X | 2
TABLE_A.b | Y | 1
TABLE_A.b | Z | 1
TABLE_A.b | null | 1
TABLE_A.c | A | 1
TABLE_A.c | Q | 1
TABLE_A.c | null | 3
TABLE_B.name | A | 3
TABLE_B.name | B | 3
TABLE_B.name | C | 0
【问题讨论】:
-
为什么需要这种格式的结果?
-
我并不需要这种格式,也可以有一个键值列表作为结果:
key | value,然后是行aTrue | 3、aFalse | 2、...。最重要的是我的应用程序可以读取它并且可以识别不同的键。 -
您的申请?告诉我们更多。
-
你需要知道什么?它基于 Java (Spring Framework / JPA 2.1)。这意味着:我基本上可以处理每一个结果。我将在上面的问题中附加一个示例 SQL Result 结构。这种新结构处理起来真的很酷,但我不知道如何到达那里......
-
啊,新的首选结构对MySQL来说更容易
标签: mysql sql count sum aggregation