0

私はこのようなデータセットを持っています

id,  numberid  
1,   45  
1,   45  
1,   41  ->invalid number, should be 45  
2,   60  
2,   60  
2,   60  
3,   71  
3,   71  
3,   72  ->invalid number, should be 71  

行の各グループ (1、2、3) には、同じコード番号も含まれている必要があります。グループ 1 には無効な番号 (マーク付き) があり、グループ 3 には無効な番号 (マーク付き) があります。
無効な番号を含むグループ ID (1 や 3 など) のみを返すにはどうすればよいですか?

4

3 に答える 3

1

これにより、グループとあまり人気のない番号 ID が表示されます

select 
    your_table.id, numberid
from your_table 
    inner join  (select id from your_table group by id having count(distinct numberid) >1) distinctitems 
        on your_table.id = distinctitems.id
    inner join 
        (
            select id, max(numbercount) as occurrencesofmostpopular
            from
            (
                select id, numberid, count(*) as numbercount
                from your_table 
                group by id, numberid
            ) a
            group by id
        ) mostpopular
        on your_table.id = mostpopular.id

group by your_table.id, your_table.numberid, occurrencesofmostpopular
having (count(*)<occurrencesofmostpopular) or (occurrencesofmostpopular=1)
于 2012-06-15T13:38:49.063 に答える
0

このクエリはトリックを行う必要があります:

SELECT id FROM your_table GROUP BY id HAVING COUNT(numberid) > 1;

どの特定の値がinvlidnumberidを持っているかを知りたい場合は、noreの複雑なクエリが必要であり、「invalidnumber」が何であるかを定義する必要があります。無効な番号は、現在のIDの発生が最も少ない番号ですか?

于 2012-06-15T08:56:17.683 に答える
0

このクエリを試してください:

SELECT
  g.id,
  COUNT(g.id)
FROM
  (SELECT id, numberid FROM your_table GROUP BY 1, 2) g
GROUP BY
  1
HAVING
  COUNT(g.id) > 1
于 2012-06-15T10:09:17.520 に答える