Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एक फ़ील्ड द्वारा समूहीकृत दो तालिकाओं से रिकॉर्ड गिनें

ऐसा लगता है कि आप ऐसा करने की कोशिश कर रहे हैं:

<स्ट्राइक> select d.RepName, count(d.RepName) DoctorReportsCount, count(h.RepName) HospitalsReportsCount, d.DateAdded from doctorreports d inner join hospitals h on d.RepName = h.RepName group by d.RepName, d.DateAdded

संपादित करें:

<स्ट्राइक> select * from ( select d.RepName, count(d.RepName) DoctorReportsCount , d.dateadded from doctorreports d group by d.RepName, d.dateadded ) d left join ( select h.RepName, count(h.RepName) HospitalsReportsCount , h.dateadded hDateadded from hospitals h group by h.RepName, h.dateadded )h on d.RepName = h.RepName

देखें SQL Fiddle with डेमो

# 2 संपादित करें, यदि आप लापता दिनों के लिए डेटा वापस करना चाहते हैं, तो मैं कैलेंडर तिथियों को शामिल करने के लिए एक तालिका बनाने की सलाह दूंगा, फिर आप उन दिनों के लिए डेटा वापस कर सकते हैं जो गायब हैं। आप जो खोज रहे हैं उसे निम्नलिखित वापस करना चाहिए। सावधान रहें, मैंने इस प्रश्न के लिए एक कैलेंडर तालिका बनाई है:

select COALESCE(d.drep, '') repname,
  COALESCE(d.DCount, 0) DoctorReportsCount,
  COALESCE(h.HCount, 0) HospitalsReportsCount,
  c.dt Dateadded
from calendar c
left join
(
  select repname drep,
    count(repname) DCount,
    dateadded ddate
  from doctorreports
  group by repname, dateadded
) d
  on c.dt = d.ddate
left join
(
  select repname hrep,
    count(repname) HCount,
    dateadded hdate
  from hospitals
  group by repname, dateadded
) h
  on c.dt = h.hdate
  and d.drep = h.hrep

देखें SQL Fiddle with Demo

यदि आप अन्य तिथियों की परवाह नहीं करते हैं, तो आप इसे date के बिना इस तरह से करेंगे टेबल:

select COALESCE(d.RepName, '') repname,
  COALESCE(d.DoctorReportsCount, 0) DoctorReportsCount,
  COALESCE(h.HospitalsReportsCount, 0) HospitalsReportsCount,
  COALESCE(p.PharmacyReportsCount, 0) PharmacyReportsCount,
  d.dateadded Dateadded
from
(
  select d.RepName,
      count(d.RepName) DoctorReportsCount
    , d.dateadded
  from doctorreports d
  group by d.RepName, d.dateadded
) d
left join
(
  select h.RepName,
    count(h.RepName) HospitalsReportsCount
  , h.dateadded hDateadded
  from hospitals h
  group by h.RepName, h.dateadded
)h
  on d.RepName = h.RepName
  and d.dateadded = h.hDateadded
left join
(
  select p.RepName,
    count(p.RepName) PharmacyReportsCount
  , p.dateadded hDateadded
  from PharmacyReports p
  group by p.RepName, p.dateadded
)p
  on d.RepName = p.RepName
  and d.dateadded = p.hDateadded

देखें SQL Fiddle with Demo



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं इस क्वेरी को कैसे अनुकूलित कर सकता हूं, निष्पादित करने में एक मिनट से अधिक समय लगता है

  2. mysqli->set_charset() करने का एक स्थायी तरीका?

  3. क्या प्राथमिक कुंजी भी अनुक्रमणिका है?

  4. MySQL में स्ट्रिंग करने के लिए int

  5. मैं MySQL में किसी मौजूदा फ़ील्ड में स्ट्रिंग कैसे जोड़ सकता हूं?