任何人都可以帮助我在Apache Derby SQL中使用SQL查询来获得"简单"计数.
鉴于表格ABC看起来像这样......
id a b c
1 1 1 1
2 1 1 2
3 2 1 3
4 2 1 1
** 5 2 1 2 **
** 6 2 2 1 **
7 3 1 2
8 3 1 3
9 3 1 1
如何编写一个查询来计算'a'的不同值如何同时具有(b = 1和c = 2)AND(b = 2和c = 1)以得到1的正确结果.标记的两行与条件匹配,并且两者的值都为a = 2,此表中只有1个不同的a值与条件匹配)
棘手的一点是,(b=1 and c=2) AND (b=2 and c=1)当应用于单行时显然是互斥的...那么如何将该表达式应用于多行不同的值?
这些查询是错误的,但为了说明我正在尝试做什么...
SELECT DISTINCT COUNT(a) WHERE b=1 AND c=2 AND b=2 AND c=1 ...
..(0)没有相互排斥
SELECT DISTINCT COUNT(a) WHERE b=1 AND c=2 OR b=2 AND c=1 ...
......(3)给我错误的结果.
SELECT COUNT(a) (CASE WHEN b=1 AND c=10 THEN 1 END) FROM ABC WHERE b=2 AND c=1
..(0)不要互相排斥
干杯,菲尔.
我假设(a,b,c)是唯一的.一种方法是使用自联接:
SELECT COUNT(*)
FROM ABC T1
JOIN ABC T2
ON T1.a = T2.a
WHERE T1.b = 1 AND T1.c = 2
AND T2.b = 2 AND T2.c = 1
Run Code Online (Sandbox Code Playgroud)
这在概念上如下工作:
(b,c) = (1,2)(b,c) = (2,1)另一种可能更容易理解的方法是使用子选择:
SELECT COUNT(*)
FROM ABC
WHERE a IN (SELECT a FROM ABC
WHERE b = 2
AND c = 1)
AND b = 1
AND c = 2
Run Code Online (Sandbox Code Playgroud)
注意:如果可以存在(a,b,c)的重复值,则SELECT COUNT(*)可以SELECT COUNT(DISTINCT T1.a)在第一个查询中使用,而不是在第二个查询中使用SELECT COUNT(DISTINCT a).
这些查询是在MySQL中测试的,而不是Apache Derby,但我希望它们也可以在那里工作.
| 归档时间: |
|
| 查看次数: |
2386 次 |
| 最近记录: |