sql >> Database teknologi >  >> RDS >> Oracle

SQL-forespørgsel til at tælle() flere tabeller

Subquery Factoring (9i+):

WITH count_cars AS (
    SELECT t.person_id
           COUNT(*) num_cars
      FROM CARS c
  GROUP BY t.person_id),
     count_children AS (
    SELECT t.person_id
           COUNT(*) num_children
      FROM CHILDREN c
  GROUP BY t.person_id),
     count_pets AS (
    SELECT p.person_id
           COUNT(*) num_pets
      FROM PETS p
  GROUP BY p.person_id)
   SELECT t.name,
          NVL(cars.num_cars, 0) 'Count(cars)',
          NVL(children.num_children, 0) 'Count(children)',
          NVL(pets.num_pets, 0) 'Count(pets)'
     FROM PERSONS t
LEFT JOIN count_cars cars ON cars.person_id = t.person_id
LEFT JOIN count_children children ON children.person_id = t.person_id
LEFT JOIN count_pets pets ON pets.person_id = t.person_id
 

Brug af inline-visninger:

SELECT t.name, NVL(cars.num_cars, 0) 'Count(cars)', NVL(children.num_children, 0) 'Count(children)', NVL(pets.num_pets, 0) 'Count(pets)' FROM PERSONS t LEFT JOIN (SELECT t.person_id COUNT(*) num_cars FROM CARS c GROUP BY t.person_id) cars ON cars.person_id = t.person_id LEFT JOIN (SELECT t.person_id COUNT(*) num_children FROM CHILDREN c GROUP BY t.person_id) children ON children.person_id = t.person_id LEFT JOIN (SELECT p.person_id COUNT(*) num_pets FROM PETS p GROUP BY p.person_id) pets ON pets.person_id = t.person_id

  1. strapi database.js / flere databasekonfigurationer

  2. Kan ikke binde argument ved indeks 2, fordi indekset er uden for rækkevidde

  3. MySQL - SUMMEN af en gruppe af tidsforskelle

  4. Når du bruger Entity Framework med MySQL, erstattes Unicode-tegn med grundlæggende tegn