SQL: Hoe kan ik een kolom toevoegen in het SELECT-queryresultaat?

Meestal selecteren we het veld of de velden in de SQL-query. bijv.

SELECT A.id FROM Member A

Maar wat als ik een kolom wil uitlijnen met elementen die overeenkomen met het andere geselecteerde veld? Ik wil bijvoorbeeld de leden-ID selecteren uit een ledentabel en de COUNT die tellen hoe vaak het lid in het tuple van een andere tabel wordt weergegeven

Dus hoe maak ik de COUNT kolom die samen met het geselecteerde resultaat uitgelijnd is?

1

3 antwoord

Als ik je goed heb begrepen, is dit wat je wilt:

SELECT A.id, count(B.MemberID) 
FROM Member A 
LEFT JOIN TableB B on A.id = B.MemberID
group by A.id

De LEFT JOIN bevat records in A die geen overeenkomstige records hebben in B. COUNT telt ook niet-nulwaarden, dus u moet deze gebruiken met < code> B.MemberID . Op deze manier is de telling voor records in A die geen overeenkomstige records in B hebben 0, omdat B. MemberID NULL is.

5
toegevoegd

Ik ga akkoord met @Adrian 's oplossing, maar als er veel kolommen in de oorspronkelijke SELECT-lijst stonden, zouden ze allemaal in GROUP BY moeten worden vermeld. Ik bedoel zoiets als dit:

SELECT
   A.id,
   A.name,
   A.whatever,
   ...
   COUNT(B.member_id)
FROM Member A
  LEFT JOIN Member_Something B ON A.id = B.member_id
GROUP BY
   A.id,
   A.name,
   A.whatever,
   ...

Het is niet altijd handig, vooral wanneer de kolommen eigenlijk uitdrukkingen zijn. U kunt in plaats daarvan een andere benadering kiezen:

SELECT
   A.id,
   A.name,
   A.whatever,
   ...
   COALESCE(B.member_count, 0)
FROM Member A
  LEFT JOIN (
    SELECT member_id, COUNT(*) AS member_count
    FROM Member_Something
    GROUP BY member_id
  ) B ON A.id = B.member_id
2
toegevoegd
@DanAndrews: Ja, Ctrl-C en Ctrl-V zijn ooit zo'n geweldige hulp, waar zouden we zonder zijn. ;)
toegevoegd de auteur Andriy M, de bron
+1 Voor het naar het volgende niveau brengen
toegevoegd de auteur Adrian Carneiro, de bron
@Andriy: ik weet niets over u, maar CTRL-C en CTRL-V werken op mijn besturingssysteem met mijn toetsenbord: D serieus, goed punt.
toegevoegd de auteur SQLMason, de bron
select member_id, count(*)
from table
group by member_id;
0
toegevoegd
Als je niet om de 0's geeft, heb je gelijk.
toegevoegd de auteur SQLMason, de bron
Ik niet, maar je hebt gelijk, misschien iemand ;-)
toegevoegd de auteur Lewis Conner, de bron