Zapytanie SQL do znajdowania rekordów gdzie count> 1
Mam tabelę o nazwie PAYMENT
. W tej tabeli mam identyfikator użytkownika, numer konta, kod pocztowy i datę. Chciałbym znaleźć wszystkie rekordy dla wszystkich użytkowników, którzy mają więcej niż jedną płatność dziennie z tym samym numerem konta.
UPDATE: dodatkowo powinien być filtr, a nie tylko zlicza rekordy, których kod pocztowy jest inny.
Tak wygląda Tabela:
| user_id | account_no | zip | date | | 1 | 123 | 55555 | 12-DEC-09 | | 1 | 123 | 66666 | 12-DEC-09 | | 1 | 123 | 55555 | 13-DEC-09 | | 2 | 456 | 77777 | 14-DEC-09 | | 2 | 456 | 77777 | 14-DEC-09 | | 2 | 789 | 77777 | 14-DEC-09 | | 2 | 789 | 77777 | 14-DEC-09 |
Wynik powinien wyglądać podobnie do tego:
| user_id | count | | 1 | 2 |
Jak byś wyrazić to w zapytaniu SQL? Myślałem, że się przyłączysz, ale z jakiegoś powodu mój licznik jest zły.
5 answers
Użyj klauzuli o klauzuli i grupuj według pól, które czynią wiersz unikalnym
Poniżej znajdziesz
Wszyscy użytkownicy, którzy mają więcej niż jedną płatność dziennie z tym samym numerem konta
SELECT
user_id ,
COUNT(*) count
FROM
PAYMENT
GROUP BY
account,
user_id ,
date
Having
COUNT(*) > 1
Update Jeśli chcesz dołączyć tylko te, które mają oddzielny ZIP, możesz najpierw uzyskać oddzielny zestaw, a następnie wykonać / GROUP przez
SELECT
user_id,
account_no ,
date,
COUNT(*)
FROM
(SELECT DISTINCT
user_id,
account_no ,
zip,
date
FROM
payment
)
payment
GROUP BY
user_id,
account_no ,
date
HAVING COUNT(*) > 1
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-22 18:52:35
Spróbuj tego zapytania:
SELECT column_name
FROM table_name
GROUP BY column_name
HAVING COUNT(column_name) = 1;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-08 14:11:40
create table payment(
user_id int(11),
account int(11) not null,
zip int(11) not null,
dt date not null
);
insert into payment values
(1,123,55555,'2009-12-12'),
(1,123,66666,'2009-12-12'),
(1,123,77777,'2009-12-13'),
(2,456,77777,'2009-12-14'),
(2,456,77777,'2009-12-14'),
(2,789,77777,'2009-12-14'),
(2,789,77777,'2009-12-14');
select foo.user_id, foo.cnt from
(select user_id,count(account) as cnt, dt from payment group by account, dt) foo
where foo.cnt > 1;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-23 09:43:52
Nie polecałbym słowa kluczowego HAVING
dla początkujących, jest to zasadniczo dla celów starszych .
Nie jestem pewien, co jest kluczem do tej tabeli (czy jest onaw pełni znormalizowana , zastanawiam się?), w związku z tym trudno jest mi przestrzegać Twojej specyfikacji:
Więc przyjęłam dosłowną interpretację.Chciałbym znaleźć wszystkie rekordy dla wszystkich użytkowników, którzy mają więcej niż jeden płatność za dzień z tym samym numerem konta... Dodatkowo istnieje powinien być filtrem, a nie tylko zlicza rekordy, których Kod pocztowy jest inaczej.
Poniższe jest bardziej wyraziste, ale może być łatwiejsze do zrozumienia i dlatego utrzymania (użyłem CTE dla Tabeli PAYMENT_TALLIES
ale może to być VIEW
:
WITH PAYMENT_TALLIES (user_id, zip, tally)
AS
(
SELECT user_id, zip, COUNT(*) AS tally
FROM PAYMENT
GROUP
BY user_id, zip
)
SELECT DISTINCT *
FROM PAYMENT AS P
WHERE EXISTS (
SELECT *
FROM PAYMENT_TALLIES AS PT
WHERE P.user_id = PT.user_id
AND PT.tally > 1
);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-23 08:51:13
delete t1 from @tbl t1 where 1<(select count(ID) from @tbl where ID=t1.ID)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-05 11:17:40