Вземете брой стойности, които се появяват само веднъж в колона

Първо, ако е уместно, използвам MySQL, въпреки че предполагам, че решението ще работи в продуктите на DB. Моят проблем е следният:

Имам проста таблица с една колона. Няма ограничения за колоната. В тази колона има някои прости данни, напр.

a
a
b
c
d
d

Трябва да получа броя/броя на стойностите, които се появяват само веднъж. От примера по-горе това би било 2 (тъй като само b и c се срещат веднъж в колоната).

Надяваме се, че е ясно, че не искам РАЗЛИЧНИ стойности, а УНИКАЛНИ стойности. Всъщност съм правил това преди, като създадох допълнителна таблица с УНИКАЛНО ограничение на колоната и просто INSERT в новата таблица от старата, като обработвах дубликатите по съответния начин.

Надявах се да намеря решение, което не изисква временната таблица и може по някакъв начин да бъде постигнато просто с елегантен SELECT.


person BoomShaka    schedule 26.09.2011    source източник
comment
LOL при трите подобни отговора, публикувани едновременно.   -  person ray    schedule 26.09.2011
comment
На този етап и след препрочитане на въпроса, всъщност мисля, че Ранди или Ромен ще вземе наградата, но ти имаше по-красиво форматиране от мен @Hugh Jones :D   -  person ray    schedule 26.09.2011
comment
Направих :) Вероятно никога няма да разберем истинското значение на този въпрос - нека продължим...   -  person Hugh Jones    schedule 26.09.2011


Отговори (6)


Ако приемем, че вашата таблица се нарича T и вашето поле се нарича F:

SELECT COUNT(F)
FROM (
    SELECT F
    FROM T
    GROUP BY F
    HAVING COUNT(*) = 1
) AS ONLY_ONCE
person Romain    schedule 26.09.2011
comment
За моите пари - това е най-добрият отговор. - person Hugh Jones; 26.09.2011
comment
Как мога да използвам where в това, т.е. WHERE (created_at BETWEEN '2021-06-01' AND '2021-06-01 23:59:59');.. Защото получавам тази грешка. неизвестна колона created_at - person Cyril; 07.07.2021

Може ли да е толкова просто като това:

Select MyColumn From MyTable Group By MyColumn Where Count(MyColumn) = 1
person ray    schedule 26.09.2011
comment
Дава ви списък с уникално представени стойности, но не и броя на споменатите стойности (трябва да погледнете количеството върнати записи). Добро настроение като цяло, но липсва броят от най-високо ниво, необходим за отговор на въпроса :) - person Romain; 26.09.2011
comment
@Romain О, разбира се... технически! Само един от групата без гласове за. Отново е като фитнес в средното училище. - person ray; 26.09.2011
comment
Разбирам какво имаш предвид... Затова исках да подчертая, че отговорът ти всъщност е добър... И щях да гласувам за, ако отговаряше изцяло на въпроса... - person Romain; 26.09.2011

просто го загнезди малко...

select count( cnt ) from
( select count(mycol) cnt from mytab group by mycol )
where cnt = 1
person Randy    schedule 26.09.2011
comment
Мисля, че плакатът не е поставил правилно въпроса му. Този отговор се отнася до различно тълкуване от това, което всички останали сме направили. - person Hugh Jones; 26.09.2011
comment
@Hugh - Не съм съгласен. Изглежда много недвусмислено за мен, трябва да получа броя/броя на стойностите, които се появяват само веднъж. От примера по-горе това би било 2 отговорът ви е просто грешен. Това връща същото като на Romain (въпреки че липсва псевдонимът за извлечената таблица) - person Martin Smith; 26.09.2011
comment
Да - препрочетох въпроса и не е двусмислен, но „Не искам РАЗЛИЧНИ стойности, искам УНИКАЛНИ“ ме изпрати по грешен начин. - person Hugh Jones; 26.09.2011

select field1, count(field1) from my_table group by field1 having count(field1) = 1

select count(*) from (select field1, count(field1) from my_table group by field1 having count(field1) = 1)

първият ще върне тези, които са уникални, а вторият ще върне броя на уникалните елементи.

person reader_1000    schedule 26.09.2011

Ето какво направих и проработи:

SELECT name 
FROM people JOIN stars ON stars.person_id = people.id 
JOIN movies ON movies.id = stars.movie_id
WHERE year = 2004
GROUP BY name, person_id ORDER BY birth;

забележка: Работех с няколко таблици тук.

CS50 Набор от проблеми 7 (pset7) 9.sql поправка!!

person Gerald    schedule 22.12.2020

person    schedule
comment
Мисля, че новата ми версия е най-независима от платформата - person Hugh Jones; 26.09.2011