[英]How to select the rows that have more than one record in a table?
"Select the beers that have been drank by more than one person". “选择超过一个人喝过的啤酒”。 Basically, I'm trying to retrieve a query result that shows me the list of the beers that has been drank by more than one person and then the name of the persons who have drank that beer.
基本上,我正在尝试检索一个查询结果,该结果显示了不止一个人喝过的啤酒列表,然后是喝过该啤酒的人的姓名。 I tried to do a group and having clause but realized that I cant have a group clause since I'm interested in duplicate values from both the name and beer columns.
我试图做一个 group and having 子句,但意识到我不能有一个 group 子句,因为我对 name 和 beer 列中的重复值感兴趣。 What should I do?
我应该怎么办?
table bpb
sysnr beer name
---------- ---------------- ----------
1260 Guinness Draught Agneta
11226 Gigantic IPA Alan
11410 Alesmith Decaden Alan
11581 Trashy Blonde Alan
1260 Guinness Draught Alan
1403 Tuborg Alan
1416 Lowenbrau Alan
1506 Jever Alan
1515 Punk IPA Alan
1523 Armageddon IPA Alan
1540 Westmalle Double Alan
1548 Brooklyn Lager Alan
1553 Chang Beer Alan
1559 Coors Light Alan
1565 Bitburger Alan
1565 Bitburger Alan
1566 Pilsner Urquell Alan
1574 Pabst Blue Ribbo Alan
1585 San Miguel Alan
1594 Lapin Kulta Alan
1625 Sierra Nevada Pa Alan
1642 Fullers London P Alan
1649 Samuel Adams Bos Alan
1650 Orval Alan
1654 Duvel Alan
1657 Chimay vit Alan
1659 Leffe Blond Alan
1664 Kwak Alan
1670 DAB Alan
1670 DAB Alan
1675 Anchor Steam Bee Alan
89607 Lagunitas IPA Alan
89793 Maredsous Tripel Alan
11410 Alesmith Decaden Dick
1553 Chang Beer Dick
1642 Fullers London P Dick
1222 Sofiero Dina
1574 Pabst Blue Ribbo Dina
1650 Orval Dina
11451 Pripps Bla Fredrik
1403 Tuborg Fredrik
1559 Coors Light Fredrik
30611 Dugges High Five Fredrik
11489 Gambrinus Henrik
1353 Budvar Henrik
1544 Litovel Classic Henrik
1566 Pilsner Urquell Henrik
1611 Breznak Henrik
89301 Bernard Henrik
11410 Alesmith Decaden Janne
1260 Guinness Draught Janne
1506 Jever Janne
1559 Coors Light Janne
1559 Coors Light Janne
1649 Samuel Adams Bos Janne
11410 Alesmith Decaden Johan
1515 Punk IPA Johan
1548 Brooklyn Lager Johan
1559 Coors Light Johan
1670 DAB Johan
1403 Tuborg Jonas
1403 Tuborg Juha
1403 Tuborg Juha
1522 Karhu Juha
1523 Armageddon IPA Juha
1566 Pilsner Urquell Juha
1574 Pabst Blue Ribbo Juha
1594 Lapin Kulta Juha
30023 US Red Ale Juha
30658 Stigbergets Sais Juha
11433 Falcon Export Kalle
1519 Saxon Kalle
1522 Karhu Kalle
1551 Citra Pale Ale Kalle
1594 Lapin Kulta Kalle
1675 Anchor Steam Bee Kalle
30023 US Red Ale Kalle
11433 Falcon Export Kjell
1515 Punk IPA Kjell
1548 Brooklyn Lager Kjell
1559 Coors Light Kjell
11226 Gigantic IPA Lennart
11451 Pripps Bla Lennart
11489 Gambrinus Lennart
11581 Trashy Blonde Lennart
1344 Amstel Lennart
1403 Tuborg Lennart
1407 Backyard Brew Lennart
1523 Armageddon IPA Lennart
1540 Westmalle Double Lennart
1565 Bitburger Lennart
1566 Pilsner Urquell Lennart
1574 Pabst Blue Ribbo Lennart
1594 Lapin Kulta Lennart
1642 Fullers London P Lennart
1650 Orval Lennart
1659 Leffe Blond Lennart
1664 Kwak Lennart
1670 DAB Lennart
89793 Maredsous Tripel Lennart
1403 Tuborg Lisen
1407 Backyard Brew Lisen
1548 Brooklyn Lager Lisen
1553 Chang Beer Lisen
1565 Bitburger Lisen
1594 Lapin Kulta Lisen
1657 Chimay vit Lisen
30611 Dugges High Five Lisen
30658 Stigbergets Sais Lisen
11410 Alesmith Decaden Magnus
1260 Guinness Draught Magnus
1407 Backyard Brew Maria
11451 Pripps Bla Marie
11489 Gambrinus Rikard
1353 Budvar Rikard
1540 Westmalle Double Rikard
1544 Litovel Classic Rikard
1611 Breznak Rikard
1650 Orval Rikard
1654 Duvel Rikard
1657 Chimay vit Rikard
1659 Leffe Blond Rikard
1664 Kwak Rikard
1670 DAB Rikard
89793 Maredsous Tripel Rikard
11410 Alesmith Decaden Urban
1416 Lowenbrau Urban
1506 Jever Urban
1565 Bitburger Urban
1642 Fullers London P Urban
1670 DAB Urban
You need a condition in the HAVING clause:在 HAVING 子句中需要一个条件:
select beer
from bpb
group by beer
having count(distinct name) > 1
With the DISTINCT keyword in COUNT() only different names will be counted.使用 COUNT() 中的 DISTINCT 关键字,只会计算不同的名称。
If you want also the name then:如果你还想要这个名字,那么:
select * from bpb
where beer in (
select beer
from bpb
group by beer
having count(distinct name) > 1
)
or with EXISTS:或存在:
select b.* from bpb b
where exists (
select 1
from bpb
where beer = b.beer and name <> b.name
)
You can use count distinct with group by and having您可以将 count distinct 与 group by 和有
select beer
from my_table
group by beer
having count(distinct name) > 1
You might find it convenient to get all the names in a single row.您可能会发现将所有名称放在一行中很方便。 I might suggest:
我可能会建议:
select beer, group_concat(distinct name)
from bpb
group by beer
having count(distinct name) > 1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.