使用计数时的聚合(不同)

时间:2019-01-27 17:30:14

标签: sql

我有一个包含50列的表,名为public_report。我想要特定列的计数(不同)以及所有列,因为我需要在Tableau中运行它

select count(distinct l.lead_key), l.*
from public_report l
group by l.lead_key

我执行查询时遇到此错误

  

尝试执行查询时发生错误:[SQLState 42803]   错误:“ l.enquiry_key”列必须出现在GROUP BY子句中或   在聚合函数中使用

II尝试添加l.enquiry_key,但它也添加了其他列名称。大约有50列可以有人建议。

也尝试过

select t.lk, t.c, lp.*
from (select lead_key lk, count(distinct lead_key) c
      from public_report
      group by lead_key) t
join public_report lp 
    on lp.lead_key = t.lk

但这不能给我正确的计数。

此表具有8700000个不同的lead_key值。但是我得到14565498作为d值

请帮助

3 个答案:

答案 0 :(得分:0)

也许您想要一个相关的子查询?

select p.*, (select count(*) from public_report p2
             where p2.lead_key = p.lead_key)
from public_report p

答案 1 :(得分:0)

如果您想知道不同的Lead_key的数量,则不应为要汇总的同一行分组

select count(distinct l.lead_key)
from public_report l

如果您想对每个键进行计数,请使用按分组的ket和count(*)

select l.lead_key,  count(*)
from public_report l
group by l.lead_key

如果您希望将count(distinct l.lead_key)排除在other列之外,则可以使用交叉联接

   select lp.*, t. my_count 
   from  public_report lp 
   cross join  (
      select count(distinct l.lead_key) my_count
      from public_report l
   ) t 

如果您想将其他lead_key的计数排除在其他列之外,则可以将内部联接与subwuery一起使用,分组为

   select lp.*, t.my_lk_count 
   from  public_report lp 
   inner  join  (
        select l.lead_key,  count(*) my_lk_count
        from public_report l
        group by l.lead_key
   ) t  ON t.lead_key = lp.lead_key 

答案 2 :(得分:0)

这是您想要的吗?

select lp.*, t.count_distinct
from public_report lp cross join
     (select count(distinct lead_key) as count_distinct
      from public_report
     ) t;

或者,因为大多数数据库都支持count(distinct)作为窗口函数:

select pr.*, count(distinct lead_key) over () as count_distinct
from public_report pr