繁体   English   中英

使用单个 SQL 查询计算列中给定值列表的出现次数

[英]Count the occurrences of a given list of values in a column using a single SQL query

我想使用单个 SQL 查询获取列中给定值列表的出现次数。 必须针对性能优化操作。

请参考下面给出的例子,

示例表名称 - 历史

代码列表
5lysgj
627czl
1lqnd8
627czl
dtrtvp
627czl
esdop9
esdop9
3by104
1lqnd8

预计 Output

需要以下面给出的格式获取这些给定代码列表 627czl、1lqnd8、esdop9、aol4m6 的出现次数。

代码 数数
627czl 3个
esdop9 2个
1lqnd8 2个
aol4m6 0

我在下面显示的方法中尝试过,但每个输入的计数都显示为使用此查询的新列,

SELECT 
    sum(case when h.code_list = 'esdop9' then 1 else 0 end) AS count_esdop9,
    sum(case when h.code_list = '627czl' then 1 else 0 end) AS count_627czl,
    sum(case when h.code_list = '1lqnd8' then 1 else 0 end) AS count_1lqnd8,
    sum(case when h.code_list = 'aol4m6' then 1 else 0 end) AS count_aol4m6
FROM history h;

注意 - 需要在 10 中的查询中给出数字输入,真实表也有数百万条记录。

如果我正确理解您需要获取以下代码的出现次数: 627czl1lqnd8esdop9

在这种情况下,您可以试试这个:

SELECT code_list, count(*) as count_
  FROM history
 WHERE code_list in ('627czl','1lqnd8','esdop9')
 GROUP BY code_list
 ORDER BY count_ DESC;

小提琴手

如果您需要获取所有代码的出现次数,您可以运行以下查询:

SELECT code_list, count(*) as count_
  FROM history
 GROUP BY code_list
 ORDER BY count_ DESC;

你可以尝试使用 GROUP BY Something like this

SELECT code_list, COUNT(1) as 'total' ROM h GROUP by code_list order by 'total' ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM