gpt4 book ai didi

SQL聚合查询问题

转载 作者:行者123 更新时间:2023-12-04 17:58:55 25 4
gpt4 key购买 nike

任何人都可以帮助我在 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 and c=2) AND (b=2 and c=1) 以获得 1 的正确结果。(标记的两行符合条件并且都具有 a=2 的值,此表中只有 1 个不同的 a 值符合条件)

棘手的一点是 (b=1 and c=2) AND (b=2 and c=1)应用于单行时显然是互斥的。
.. 那么如何在 a 的多行不同值中应用该表达式?

这些查询是错误的,但为了说明我正在尝试做什么......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

这在概念上的工作原理如下:
  • 找到所有满足 (b,c) = (1,2) 的行
  • 找到所有满足 (b,c) = (2,1) 的行
  • 当 a 相同时加入上述两个集合。
  • 计算连接结果中的行数。

  • 另一种更容易理解的方法是使用子选择:
    SELECT COUNT(*)
    FROM ABC
    WHERE a IN (SELECT a FROM ABC
    WHERE b = 2
    AND c = 1)
    AND b = 1
    AND c = 2

    注意:如果 (a,b,c) 可以有重复的值,那么代替 SELECT COUNT(*)使用 SELECT COUNT(DISTINCT T1.a)在第一个查询中,和 SELECT COUNT(DISTINCT a)在第二。

    这些查询是在 MySQL 中测试的,而不是在 Apache Derby 中测试的,但我希望它们也能在那里工作。

    关于SQL聚合查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2845680/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com