简体   繁体   English

如何 select 表中有多个记录的行?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM