ขอบคุณสำหรับการอ่าน ฉันลองสิ่งนี้มาสี่ชั่วโมงแล้วและมีความก้าวหน้าที่ดี แต่ก็ไม่สามารถเข้าใจได้
ฉันได้ทำให้แอปพลิเคชันง่ายขึ้นเหลือแค่พารามิเตอร์ที่ฉันกำลังดิ้นรนเท่านั้น
ฉันมีฐานข้อมูลของลูกค้าที่เคยใช้บริการ หนึ่งครั้งต่อปีและตารางค้นหาสองตารางเพื่อให้สามารถเข้ารหัสผลลัพธ์ได้
Table - Gender
gender_code | gender_name
1 | Male
2 | Female
3 | Other
Table - Service
service_code | service_name
1 | WiFi
2 | Network
3 | Telephone
Table - Customers13
transactionid | customerid | service_code | gender_code
1 | 4 | 3 | 1
2 | 7 | 1 | 2
3 | 9 | 1 | 1
Table - Customers14
transactionid | customerid | service_code | gender_code
1 | 13 | 2 | 2
2 | 4 | 2 | 1
3 | 17 | 2 | 2
สิ่งที่ฉันต้องการได้รับคือตารางที่ส่งคืนซึ่งมีการเรียงลำดับการบริการและเพศที่เป็นไปได้ทั้งหมดและจำนวนแต่ละรายการในแต่ละปี ฉันเริ่มต้นด้วยการพยายามนับให้ถูกต้องและใช้แบบสอบถาม MySQL ต่อไปนี้:
select t.service_name, t.gender_name, count13, count14
from (select service_name, gender_name, count(Customers13.gender_code) as count13
from Customers13
inner join Gender on Customers13.gender_code = Gender.gender_code
inner join Service on Customers13.service_code = Service.service_code
group by service_name, gender_name) t
inner join (select service_name, gender_name, count(Customers14.gender_code) as count14
from Customers14
inner join Gender on Customers14.gender_code = Gender.gender_code
inner join Service on Customers14.service_code = Service.service_code
group by service_name, gender_name) m on m.service_name=t.service_name and
m.gender_name=t.gender_name
สิ่งนี้ทำให้ฉันใกล้จะคืนตารางที่ฉันต้องการได้ แต่จะมีการแข่งขันในทั้งสองตารางเท่านั้น สิ่งที่ฉันต้องการคือการได้บรรทัดแม้ว่าจะไม่มีตารางที่ตรงกันก็ตาม ตัวอย่างเช่น:
service_name | gender_name | count13 | count14
WiFi | Male | 1 | 0
WiFi | Female | 1 | 0
WiFi | Other | 0 | 0
Network | Male | 0 | 1
Network | Female | 0 | 2
Network | Other | 0 | 0
Telephone | Male | 1 | 0
Telephone | Female | 0 | 0
Telephone | Other | 0 | 0
ความพยายามครั้งสุดท้ายของฉันคือใช้การรวมแบบข้ามเพื่อให้สองคอลัมน์แรกถูกต้อง แต่ฉันไม่รู้ว่าจะข้ามไปยังการเติมฟิลด์การนับได้อย่างไร:
เลือก service_name, sex_name จาก Service cross join Gender