2015-09-03 2 views
0

У меня есть таблица вроде этого:Как получить счет от disctinct значения одного столбца в MYSQL

id  2  3 

1, 14406, 2189 
2, 14428, 2191, 
3, 14442, 2192, 
4, 14441, 2192, 
5, 14441, 2192, 

И мне интересно, как если это возможно, чтобы получить рассчитывать, так что я могу сказать, сколько раз строки, где второй столбец и Третий столбец тот же самый. Я вижу, что 1-я строка уникальна, поэтому она появляется 1 раз. То же самое с 2. В третьей строке 2 столбец уникален, поэтому означает, что эта строка тоже уникальна. Но 4-я и 5-я строка одинаковы, и я хочу показать, что она появляется 2 раза в моей таблице. Как я мог рассчитывать? Должен ли я использовать Group by или что-то вроде подзапросов?

+0

если возможно, добавить ожидаемый результат. еще лучше, добавьте любые попытки решения. – Barranka

ответ

1

Первый год ou'd группа col 2 и 3, чтобы получить одну запись для каждой отдельной пары. Для каждой пары вы хотите, чтобы все идентификаторы были задействованы, поэтому постройте строку идентификаторов с GROUP_CONCAT. Затем сохраняйте пары, которые происходят более одного раза, с использованием предложения HAVING.

select col2, col3, group_concat(id) as ids 
from mytable 
group by col2, col3 
having count(*) > 1; 
 
col2 col3 ids 
14441 2192 4,5 

(Это, по существу, splash58 отвечают, так что вы можете принять это. Я просто подумал, что было бы хорошо, чтобы объяснить этапы.)

0

Может быть что-то вроде этого:

select `2`, `3`, count(*) 
from (select distinct `2`, `3` from your_table) as a 
group by `2`, `3` 
having count(*) > 1 
0

Попробуйте это:

SELECT count(id) as count_times 
FROM table 
WHERE column1=column2 
+0

Мб, вы поняли меня неправильно. Я не имел в виду, что они должны быть равны друг другу. Я хотел сказать: как показать, сколько раз выводится строка с теми же 2 и 3. Нет, когда строки 2 и 3 равны, но когда есть другая строка с теми же 2-м и 3-м полями –

0
select group_concat(id), count(*) c 
    from thetable 
    group by `2`, `3` 
    having c > 1 

результат

group_concat(id) c 
4,5     2 
0
select 2,count(*) 
from my_table 
group by 
2 
+0

Возможно, я что-то не так, но она говорит мне: 'SQLSTATE [21000]: Нарушение кардинальности: 1241 Операнд должен содержать 1 столбец' –

+0

Хотя этот вопрос может ответить на вопрос, добавление описания о том, почему оно работает, улучшит его долгосрочную ценность. –

Смежные вопросы