Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MYSQL Tham gia trái phép COUNTS từ nhiều bảng

select
  t.Topic,
  t.Title,
  count(distinct s.starID) as StarCount,
  count(distinct m.User) as UserCount,
  count(distinct m.messageID) as MessageCount
from
  Topics t
  left join Messages m ON m.Topic = t.Topic
  left join Stars_Given s ON s.Topic = t.Topic
group by
  t.Topic,
  t.Title

Sql Fiddle

Hoặc, bạn có thể thực hiện tổng hợp trong các truy vấn phụ, điều này có thể sẽ hiệu quả hơn nếu bạn có một lượng dữ liệu đáng kể trong các bảng:

select
  t.Topic,
  t.Title,
  s.StarCount,
  m.UserCount,
  m.MessageCount
from
  Topics t
  left join (
    select 
      Topic, 
      count(distinct User) as UserCount,
      count(*) as MessageCount
    from Messages
    group by Topic
  ) m ON m.Topic = t.Topic
  left join (
    select
      Topic, 
      count(*) as StarCount
    from Stars_Given 
    group by Topic
  ) s ON s.Topic = t.Topic

Sql Fiddle




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dữ liệu cơ sở dữ liệu truy cập ứng dụng C # windows không tiếp tục đóng

  2. Sự khác biệt giữa kiểu dữ liệu cột MySQL BOOL và BOOLEAN là gì?

  3. mysql, kết xuất, khôi phục cơ sở dữ liệu

  4. SQLite INSERT - TRÊN CẬP NHẬT KHÓA DUPLICATE (UPSERT)

  5. Node.js kết nối thông qua ssh