1

linkage以下の値のようなテーブルがあります

++++++++++++++++++++++++++
+ company_id +  industry +
++++++++++++++++++++++++++
+     1      +    a      +
+     1      +    b      +
+     2      +    a      +
+     2      +    c      +
+     3      +    a      +
+     4      +    c      +
+     5      +    a      +
++++++++++++++++++++++++++

業界をグループ化して、降順で並べ替えたトップカウントを取得する方法はありますか?

a = count 4
c = count 2
b = count 1

次に、重複した業界を削除して、それぞれのカウントが高い業界のみを残しますcompany_id


編集 1

この編集は OP コメントに基づいていますI wish to only have the industry with the highest count, and deleting the rest of the entry for the same company_id. say for company_id 1, we will delete the second row, for company_id 2 we will delete the forth row.

以下は私が持っているものです。

++++++++++++++++++++++++++
+ company_id +  industry +
++++++++++++++++++++++++++
+     1      +    a      +
+     1      +    b      +
+     1      +    c      +
+     2      +    a      +
+     2      +    c      +
+     3      +    a      +
+     4      +    c      +
+     5      +    a      +
++++++++++++++++++++++++++

列業界で見られるように、最大​​数があります。重複した company_id ごとにこのエントリを保持し、残りのすべてのエントリを削除したいと思います。

company_id=1 を検討してください。2列目と3列目を外す必要があります。company_id=2 を検討してください。5行目を削除する必要があります。id=3,4,5 の場合、重複していないため何も起こりません。

私のテーブルにあるはずの最終データは

++++++++++++++++++++++++++
+ company_id +  industry +
++++++++++++++++++++++++++
+     1      +    a      +
+     2      +    a      +
+     3      +    a      +
+     4      +    c      +
+     5      +    a      +
++++++++++++++++++++++++++
4

3 に答える 3

1
select t6.company_id,t6.industry from
(select t5.company_id,t5.industry,
row_number() over (partition by t5.company_id order by t5.company_id) rn
from 
(select t3.company_id,t4.industry from
(select t2.company_id,max(t2.count) count from(
select m.company_id,m.industry,t1.count from linkage m
join
(select n.industry,count(n.industry) count from linkage n
group by n.industry
order by count desc)t1
on m.industry = t1.industry
order by m.company_id)t2
group by t2.company_id
order by t2.company_id)t3
join
(
select m.company_id,m.industry,t1.count from linkage m
join
(select n.industry,count(n.industry) count from linkage n
group by n.industry
order by count desc)t1
on m.industry = t1.industry
order by m.company_id)t4
on t3.company_id = t4.company_id 
and t3.count = t4.count)t5
)t6
where t6.rn = '1'
于 2013-02-21T08:34:21.687 に答える
1
select n.industry,count(n.industry) count from linkage n
group by n.industry
order by count desc

select t3.company_id,t4.industry from
(select t2.company_id,max(t2.count) count from(
select m.company_id,m.industry,t1.count from linkage m
join
(select n.industry,count(n.industry) count from linkage n
group by n.industry
order by count desc)t1
on m.industry = t1.industry
order by m.company_id)t2
group by t2.company_id
order by t2.company_id)t3
join
(
select m.company_id,m.industry,t1.count from linkage m
join
(select n.industry,count(n.industry) count from linkage n
group by n.industry
order by count desc)t1
on m.industry = t1.industry
order by m.company_id)t4
on t3.company_id = t4.company_id 
and t3.count = t4.count

sqlfiddle でのデモ

于 2013-02-21T07:35:18.837 に答える
1

これはどう?

SELECT industry, count(industry) as "total" 
FROM linkage 
GROUP BY industry 
ORDER BY total DESC

sqlfiddle でのデモ


編集 1

以下の質問を見ていただけますか。

データベースから重複レコードを削除するにはどうすればよいですか

それがあなたが探しているものだと思います。

于 2013-02-21T06:54:01.693 に答える