是否有任何其他选项可以从表中获取总计数和同一查询中列的不同计数?

Posted

技术标签:

【中文标题】是否有任何其他选项可以从表中获取总计数和同一查询中列的不同计数?【英文标题】:Is there any other option to get total count from table and distinct count of a column in same query? 【发布时间】:2019-12-14 07:25:36 【问题描述】:

我有 4 条具有相似事件名称和 2 个不同设备 ID 的记录的表,我想要总数。具有全部唯一设备 ID 的记录。

mysql 给出了完美的结果,但 redshift 给出的数据不正确。

CREATE TABLE test (
  event_name varchar(50)  NOT NULL,
  deviceid int NOT NULL
);

INSERT INTO test (event_name, deviceid) VALUES
('install', 1),
('install', 1),
('install', 2),
('install', 1);

select count(event_name), count(distinct(deviceid)) from test;

Mysql结果

【问题讨论】:

redshift的输出是什么??? 【参考方案1】:

你应该使用Distinct而不使用( )

SELECT count(event_name), COUNT(Distinct deviceid) 
FROM Test;

或者

SELECT count(event_name), (SELECT count(deviceid) FROM (SELECT DISTINCT deviceid FROM test)) DisCount
FROM test;

【讨论】:

我只需要一行包含不同设备的总数和总数 添加了有问题的图片。 redshift 的输出与 mysql 不同,它给出 count = 4 和 distinct count = 4 我不想使用两个查询或子查询。 @PavanSikarwar 尝试更新的答案SELECT count(event_name), COUNT(Distinct deviceid) FROM Test;【参考方案2】:

据我所知,Redshift 应该能正确处理这个查询:

select count(event_name), count(distinct deviceid)
from test;

也就是说,根据我使用 RedShift 的经验,count(distinct) 非常慢,尤其是在整个表上。 (这可能已修复。)

如果情况仍然如此,那么一个简单的解决方法是:

select sum(cnt) as row_count, count(*) as distinct_count
from (select deviceid, count(*) as cnt
      from test
      group by deviceid
     ) t

这可能会明显更快。

【讨论】:

以上是关于是否有任何其他选项可以从表中获取总计数和同一查询中列的不同计数?的主要内容,如果未能解决你的问题,请参考以下文章

使用模型内的query()方法从表中获取单个值

分页问题:返回正文中的总计数和总页数,而不添加到正在获取的其他数据

从表中选择所有或仅特定的行

Cassandra 无法从表中查询行总和

从表中获取所有名称的 HQL 查询

查询以从表中仅获取一项