Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mysql bagaimana menemukan jumlah total baris anak sehubungan dengan orang tua

Misalkan tabel Anda adalah:

mysql> SELECT * FROM Employee;
    +-----+------+-------------+------+
    | SSN | Name | Designation | MSSN |
    +-----+------+-------------+------+
    | 1   | A    | OWNER       | 1    |
    | 10  | G    | WORKER      | 5    |
    | 11  | D    | WORKER      | 5    |
    | 12  | E    | WORKER      | 5    |
    | 2   | B    | BOSS        | 1    |
    | 3   | F    | BOSS        | 1    |
    | 4   | C    | BOSS        | 2    |
    | 5   | H    | BOSS        | 2    |
    | 6   | L    | WORKER      | 2    |
    | 7   | I    | BOSS        | 2    |
    | 8   | K    | WORKER      | 3    |
    | 9   | J    | WORKER      | 7    |
    +-----+------+-------------+------+
    12 rows in set (0.00 sec)

Kueri adalah :

SELECT  SUPERVISOR.name AS SuperVisor, 
        GROUP_CONCAT(SUPERVISEE.name  ORDER BY SUPERVISEE.name ) AS SuperVisee, 
        COUNT(*)  
FROM Employee AS SUPERVISOR 
  INNER JOIN Employee SUPERVISEE ON  SUPERVISOR.SSN = SUPERVISEE.MSSN 
GROUP BY SuperVisor;

Query akan menghasilkan hasil seperti:

    +------------+------------+----------+
    | SuperVisor | SuperVisee | COUNT(*) |
    +------------+------------+----------+
    | A          | A,B,F      |        3 |
    | B          | C,H,I,L    |        4 |
    | F          | K          |        1 |
    | H          | D,E,G      |        3 |
    | I          | J          |        1 |
    +------------+------------+----------+
    5 rows in set (0.00 sec)

[Jawab ]:Ini untuk Satu tingkat (pengawasan langsung) untuk menemukan semua pengawas di semua tingkat yang mungkin Anda harus gunakan while loop (gunakan prosedur tersimpan).

Meskipun dimungkinkan untuk mengambil karyawan di setiap level dan kemudian mengambil UNION mereka, kami tidak dapat, secara umum, menentukan kueri seperti "mengambil yang diawasi dari seorang karyawan di semua level" tanpa menggunakan mekanisme perulangan. "

REFERENSI :pada slide ini baca slide nomor 23. BUKU ini adalah " DASAR-DASAR SISTEM DATABASE Edisi Keempat" pada bab "Aljabar Relasional dan Kalkulus Relasional" ada topik "Operasi Penutupan Rekursif".

Menambahkan Query untuk pembuatan Tabel, Semoga bermanfaat bagi Anda:

mysql> CREATE TABLE IF NOT EXISTS `Employee` (
    ->   `SSN` varchar(64) NOT NULL,
    ->   `Name` varchar(64) DEFAULT NULL,
    ->   `Designation` varchar(128) NOT NULL,
    ->   `MSSN` varchar(64) NOT NULL, 
    ->   PRIMARY KEY (`SSN`),
    ->   CONSTRAINT `FK_Manager_Employee`  FOREIGN KEY (`MSSN`) REFERENCES Employee(SSN)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.17 sec)

Anda dapat memeriksa Tabel seperti:

mysql> DESCRIBE Employee;
+-------------+--------------+------+-----+---------+-------+
| Field       | Type         | Null | Key | Default | Extra |
+-------------+--------------+------+-----+---------+-------+
| SSN         | varchar(64)  | NO   | PRI | NULL    |       |
| Name        | varchar(64)  | YES  |     | NULL    |       |
| Designation | varchar(128) | NO   |     | NULL    |       |
| MSSN        | varchar(64)  | NO   | MUL | NULL    |       |
+-------------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)  


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. unggahan multi gambar dengan jumlah yang salah pada unggahan file

  2. Dapatkan semua karakter sebelum spasi di MySQL

  3. hapus mysql, peningkatan otomatis

  4. Dapatkan Catatan Per Bulan Tetapi Juga Dapatkan Nol Jika Tidak Ada Catatan Bulan Itu

  5. Python Pandas menulis ke sql dengan nilai NaN