是否有任何其他选项可以从表中获取总计数和同一查询中列的不同计数?
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
这可能会明显更快。
【讨论】:
以上是关于是否有任何其他选项可以从表中获取总计数和同一查询中列的不同计数?的主要内容,如果未能解决你的问题,请参考以下文章