Как получить дубликаты строк с группировкой и упорядочением по? - PullRequest
0 голосов
/ 06 мая 2019

Я хочу получить повторяющиеся строки в порядке, я пытаюсь следующим образом:

SELECT utc_id, utc_utiid, utc_comid, utc_recomendacoes FROM
( SELECT * FROM utilizador_competencia ORDER BY utc_recomendacoes DESC)
as sub GROUP BY utc_utiid, utc_comid HAVING COUNT(*) > 1

Результат:

+--------+-----------+-----------+-------------------+
| utc_id | utc_utiid | utc_comid | utc_recomendacoes |
+--------+-----------+-----------+-------------------+
|     14 |         2 |       397 |                54 |
+--------+-----------+-----------+-------------------+

Здесь строки дубликатов, но я хочу получить utc_id -> 207 вместо utc_ic -> 14:

+--------+-----------+-----------+-------------------+
| utc_id | utc_utiid | utc_comid | utc_recomendacoes |
+--------+-----------+-----------+-------------------+
|     14 |         2 |       397 |                54 |
|    207 |         2 |       397 |                87 |
+--------+-----------+-----------+-------------------+

Ответы [ 3 ]

1 голос
/ 06 мая 2019

Я собираюсь догадаться, что вы намереваетесь:

select c.*
from utilizador_competencia c
where exists (select 1
              from utilizador_competencia c2
              where c2.utc_utiid = c.utc_utiid and
                    c2.utc_comid = c.utc_comid and
                    c2.utc_id <> c.utc_id
             )
order by c.utc_id, c.utc_id, c.utc_recomendacoes desc;
0 голосов
/ 06 мая 2019
SELECT t.utc_id, t.utc_utiid, t.utc_comid, t.utc_recomendacoes
FROM
( SELECT utc_utiid, utc_comid 
  FROM utilizador_competencia 
  GROUP BY utc_utiid, utc_comid HAVING COUNT(*) > 1) d
INNER JOIN utilizador_competencia t
ON d.utc_utiid=t.utc_utiid
AND d.utc_comid=t.utc_comid 
ORDER BY t.utc_recomendacoes DESC;

Это то, что вы хотите?

0 голосов
/ 06 мая 2019

применяется порядок к видимому результату .. подзапрос - это только набор данных .. поэтому порядок для подзапроса бесполезен
переместить порядок за пределы подзапроса

SELECT utc_id, utc_utiid, utc_comid, utc_recomendacoes 
FROM ( 
    SELECT * 
    FROM utilizador_competencia 
    ) as sub 
GROUP BY utc_utiid, utc_comid  
HAVING COUNT(*) > 1
ORDER BY utc_recomendacoes DESC

и основываясь на вашем комментарии

SELECT utc_id, utc_utiid, utc_comid, utc_recomendacoes 
FROM utilizador_competencia 
GROUP BY utc_utiid, utc_comid  
HAVING COUNT(*) > 1
ORDER BY utc_recomendacoes DESC
...