我有值
Contractor_Key
--
AAA
BBB
CCC
BBB
CCC
CCC
DDD
CCC
在这个例子中,AAA和DDD只重复一次,这意味着一次重复值的计数是2. BBB重复两次,这里重复两次重复项只是1。 确切的树时间重复值根本没有,我不想输出CCC,因为它重复了3次以上。
我需要计算,我有多少个值,它们重复一次,两次或三次。
我知道这是使用分组的东西,但是没有意识到如何获得理想的结果
答案 0 :(得分:6)
使用两个级别的聚合:
// Create fake data
ArrayList<Integer> allRows = new ArrayList<Integer>();
for (int i = 0; i < 70; i++)
allRows.add(i);
System.out.printf("All Data: %s%n", allRows.toString());
// Create 2 Dementional Array
ArrayList<ArrayList<Integer>> twoDRows = new ArrayList<ArrayList<Integer>>();
// Add the 5 rows
for (int i = 0; i < 5; i++)
twoDRows.add(new ArrayList<Integer>());
// Split allRows
for (int i = 0; i<allRows.size(); i++) {
int rowToAddTo;
// Horizontal
rowToAddTo = i/(allRows.size()/twoDRows.size());
// Vertical
rowToAddTo = i%twoDRows.size();
twoDRows.get(rowToAddTo).add(allRows.get(i));
}
// Pretty-ish print
for (ArrayList<Integer> array:twoDRows)
System.out.println(array);
我称之为“histogram-of-histgrams”查询。我为每个计数提供了两个密钥示例,供进一步调查。
答案 1 :(得分:5)
SELECT item_repeated_quantity, COUNT(*) FROM (
SELECT Contractor_Key, COUNT(*) AS item_repeated_quantity from t group by Contractor_Key HAVING COUNT(*) <= 3
)t
GROUP BY item_repeated_quantity
ORDER BY item_repeated_quantity
答案 2 :(得分:1)
我认为你想要进行两次聚合 - 首先找到每个contractor_key的计数,然后找到每个count值的计数(在第一次聚合中找到):
select cnt,
count(*) as times
from (
select count(*) cnt
from your_table
group by contractor_key
) t
group by cnt;
答案 3 :(得分:0)
试试这个
;WITH CTE
AS
(
SELECT
Contractor_Key,
Cnt = COUNT(1)
FROM MyTable
GROUP BY Contractor_Key
)
SELECT
Cnt,
COUNT(1)
FROM CTE