Oracle HAVING子句中的2x计数

Oracle HAVING子句中的2x计数,oracle,count,Oracle,Count,我有以下问题: 我想在一个表中统计数据,在第二个表中统计数据,并在having子句中比较计数,并且只显示具有相同计数的行 诸如此类: SELECT bla FROM T1 t1 JOIN T2 t2 ON t1.id = t2.id HAVING COUNT(counted data from table1) = COUNT(counted data from table2) 你知道吗? 干杯标准SQL: SELECT t1.bla, t1.id, t1.counter, t2.counter

我有以下问题: 我想在一个表中统计数据,在第二个表中统计数据,并在having子句中比较计数,并且只显示具有相同计数的行 诸如此类:

SELECT bla
FROM T1 t1 JOIN T2 t2
ON t1.id = t2.id
HAVING COUNT(counted data from table1) = COUNT(counted data from table2)
你知道吗? 干杯

标准SQL:

SELECT t1.bla, t1.id, t1.counter, t2.counter
  FROM (SELECT t1.bla, t1.id, COUNT(counted_data_from_t1) AS counter
          FROM t1
         GROUP BY t1.bla, t1.id
       ) AS t1
  JOIN (SELECT t2.id, COUNT(counted_data_from_t2) AS counter
          FROM t2
         GROUP BY t2.id
       ) AS t2
    ON t1.id = t2.id AND t1.counter = t2.counter
Oracle SQL,因为Oracle不喜欢以前的表别名:

SELECT t1.bla, t1.id, t1.counter, t2.counter
  FROM (SELECT t1.bla, t1.id, COUNT(counted_data_from_t1) AS counter
          FROM t1
         GROUP BY t1.bla, t1.id
       ) t1
  JOIN (SELECT t2.id, COUNT(counted_data_from_t2) AS counter
          FROM t2
         GROUP BY t2.id
       ) t2
    ON t1.id = t2.id AND t1.counter = t2.counter
你只需要决定bla来自哪里;我提名了t1。我假设对于任何给定的t1.id值,都有一个值t1.bla。如果没有,那么您需要更清楚地解释您正在计算的内容、各个列的位置以及表的键是什么

更新:很抱歉没有注意到Oracle标记并给出无效的Oracle语法。

标准SQL:

SELECT t1.bla, t1.id, t1.counter, t2.counter
  FROM (SELECT t1.bla, t1.id, COUNT(counted_data_from_t1) AS counter
          FROM t1
         GROUP BY t1.bla, t1.id
       ) AS t1
  JOIN (SELECT t2.id, COUNT(counted_data_from_t2) AS counter
          FROM t2
         GROUP BY t2.id
       ) AS t2
    ON t1.id = t2.id AND t1.counter = t2.counter
WITH jezyki as 
          (SELECT pseudo_wampira, COUNT(*) AS counter
            FROM Jezyki_obce_w
            GROUP BY pseudo_wampira
          )
    ,sprawnosc as 
         (SELECT pseudo_wampira, sprawnosc, COUNT(*) AS counter
          FROM Sprawnosci_w
         GROUP BY pseudo_wampira, sprawnosc 
         )
      SELECT jezyki.pseudo_wampira, sprawnosc.counter
        FROM jezyki,sprawnosc
       WHERE  jezyki.pseudo_wampira = sprawnosc.pseudo_wampira 
         AND  jezyki.counter = sprawnosc.counter
Oracle SQL,因为Oracle不喜欢以前的表别名:

SELECT t1.bla, t1.id, t1.counter, t2.counter
  FROM (SELECT t1.bla, t1.id, COUNT(counted_data_from_t1) AS counter
          FROM t1
         GROUP BY t1.bla, t1.id
       ) t1
  JOIN (SELECT t2.id, COUNT(counted_data_from_t2) AS counter
          FROM t2
         GROUP BY t2.id
       ) t2
    ON t1.id = t2.id AND t1.counter = t2.counter
你只需要决定bla来自哪里;我提名了t1。我假设对于任何给定的t1.id值,都有一个值t1.bla。如果没有,那么您需要更清楚地解释您正在计算的内容、各个列的位置以及表的键是什么


更新:很抱歉没有注意到Oracle标记并给出无效的Oracle语法。

计算什么??选择count*fromt1将返回总行数,您不能将其应用于检查其他表中的行,您能详细说明一下吗?什么是计数??select count*from T1将返回总行数,您不能将其应用于检查其他表中的行,您能详细说明一下吗?我是按照您的方式执行的,但有一个错误行5,第9列,SQL命令未正确结束select PSUDE_wampira中的select jezyki.PSUDE_wampira,sprawnosc.counter,通过伪wampira从Jezyki_-obce_-w组中计数*作为计数器作为Jezyki-JOIN选择伪wampira,sprawnosc,通过伪wampira从Sprawnosci_-w组中计数*作为计数器,在jezyki.pseudo_-wampira=sprawnosc.pseudo_-wampira和jezyki.counter=sprawnosc.counter上使用sprawnosc作为sprawnosc您看到错误了吗?很抱歉,我在注释中遇到了编码问题。代码有类似于您的表格;第五行是jezyki@robocoder-Oracle不允许用户使用表别名,尽管它允许使用列别名。尝试删除该单词,使第5行变为t1,第9行变为t2。@AlexPoole:感谢您在我忙得没法回答时提供的帮助。我是按照您的方式完成的,但第5行第9列有一个错误,SQL命令没有正确结束SELECT pseudo_-wampira中的SELECT jezyki.pseudo_-wampira,sprawnosc.counter,通过伪wampira从Jezyki_-obce_-w组中计数*作为计数器作为Jezyki-JOIN选择伪wampira,sprawnosc,通过伪wampira从Sprawnosci_-w组中计数*作为计数器,在jezyki.pseudo_-wampira=sprawnosc.pseudo_-wampira和jezyki.counter=sprawnosc.counter上使用sprawnosc作为sprawnosc您看到错误了吗?很抱歉,我在注释中遇到了编码问题。代码有类似于您的表格;第五行是jezyki@robocoder-Oracle不允许用户使用表别名,尽管它允许使用列别名。试着去掉那个词,这样第5行就变成t1行,第9行变成t2行。@AlexPoole:谢谢你在我忙得没时间回复的时候帮了我的忙。
WITH jezyki as 
          (SELECT pseudo_wampira, COUNT(*) AS counter
            FROM Jezyki_obce_w
            GROUP BY pseudo_wampira
          )
    ,sprawnosc as 
         (SELECT pseudo_wampira, sprawnosc, COUNT(*) AS counter
          FROM Sprawnosci_w
         GROUP BY pseudo_wampira, sprawnosc 
         )
      SELECT jezyki.pseudo_wampira, sprawnosc.counter
        FROM jezyki,sprawnosc
       WHERE  jezyki.pseudo_wampira = sprawnosc.pseudo_wampira 
         AND  jezyki.counter = sprawnosc.counter