我有一张包含以下数据的表格。
表名:t_keyword_count
f_id f_keyword f_count f_dominant
==================================================
101 C++ 2 0
101 Java 4 0
101 PHP 6 0
101 Python 5 0
101 Ruby 9 0
102 ruby 4 0
102 java 6 0
102 php 9 0
102 C++ 7 0
102 Jquery 2 0
喜欢那个
我的要求是:我需要将f_dominant状态更新为1,其中我想要关于f_id的前3个f_count值。即我想要这个结果集
101 ruby 9 1
101 php 6 1
101 python 5 1
101 JAVA 4 0
101 c++ 2 0
102 php 9 1
102 c++ 7 1
102 jAVA 6 1
102 RUBY 4 0
102 JQUERY 2 0
答案 0 :(得分:1)
SELECT x.*
, CASE WHEN COUNT(*) <= 3 THEN 1 ELSE 0 END f_dominant
FROM t_keyword_count x
JOIN t_keyword_count y
ON y.f_id = x.f_id
AND y.f_count >= x.f_count
GROUP
BY x.f_id,x.f_keyword
ORDER
BY f_id,f_count DESC;
或类似的东西
答案 1 :(得分:0)
这有效,但行数过多可能会很慢:
update t_keyword_count t
set f_dominant =
f_count >= ( select f_count from
( select * from t_keyword_count ) a
where f_id = t.f_id
order by f_count desc
limit 2,1
)
http://sqlfiddle.com/#!2/47504/2
或者如果只更新一次就这样:
update t_keyword_count t
set f_dominant = 1
where f_count >= ( select f_count from
( select * from t_keyword_count ) a
where f_id = t.f_id
order by f_count desc
limit 2,1
)