2013-02-18 80 views
1

如何顯示不包含在group by子句中的列?如何顯示不包含在group by子句中的列?

select user_id,DecryptString(first_name) as first_name, DecryptString(last_name) as last_name, DecryptString(middle_name) as middle_name,count(*) 
from mamt 
where middle_name<>'9ZnIFajWgaw=' 
    group by first_name,middle_name,last_name having count(*) >1; 

這裏,在格蘭上面的查詢,user_id是不是在GROUP BY clause.but我希望它得到顯示。 怎麼辦?

+0

您需要包括在GROUP_BY USER_ID因爲您使用聚合函數(計)。 – 2013-02-18 11:54:06

+0

將它添加到'GROUP BY'子句中,除非每個分組的'first_name,middle_name,last_name'有多個'user_id'。在這種情況下,每個分組的'first_name,middle_name,last_name'顯示哪個'use_id'?以及如何爲每個'first_name,middle_name,last_name'使用多個用戶ID? – 2013-02-18 11:54:32

+1

您正在使用哪些DBMS? – 2013-02-18 11:56:10

回答

0

像這樣

select user_id, DecryptString(a.first_name),DecryptString(a.last_name), DecryptString(a.middle_name) 
from mamt 
inner join 
(
select first_name, last_name,middle_name,count(*) as c 
from mamt 
where middle_name<>'9ZnIFajWgaw=' 
group by first_name,middle_name,last_name having count(*) >1 
) a on a.first_name = mamt.first_name AND a.last_name = mamt.last_name AND a.middle_name = mamtmiddle_name 
+0

非常感謝Aiston ..它的工作。 – user2080164 2013-02-18 12:17:20

2

你也可以做這樣的:

select * 
from (
select user_id, 
     DecryptString(first_name), 
     DecryptString(middle_name), 
     DecryptString(last_name), 
     count(*) over (partition by first_name, middle_name, last_name) cn 
from mamt 
where middle_name<>'9ZnIFajWgaw=') 
where cn > 1; 

Here is a sqlfiddle demo

相關問題