kez kısıtlamaları kullanarak, bir sorguda iki kez sayım

3 Cevap php

Aşağıdaki tablolar göz önüne alındığında:

Table1
[class]   [child]
 math      boy1
 math      boy2
 math      boy3
 art       boy1

Table2
[child]   [glasses]
 boy1       yes
 boy2       yes
 boy3       no

Ben sınıf başına çocuk sayısı sorgulamak istiyorsanız, bunu yapmak istiyorum:

SELECT class, COUNT(child) FROM Table1 GROUP BY class

Ben gözlük sınıf başına düşen çocuk sayısı sorgulamak istedim ve bunu yapmak istiyorum:

SELECT Table1.class, COUNT(table1.child) FROM Table1
LEFT JOIN Table2 ON Table1.child=Table2.child
WHERE Table2.glasses='yes' GROUP BY Table1.class

ama gerçekten ne yapmak istiyorum:

SELECT class, COUNT(child), COUNT(child wearing glasses)

ve açıkçası ben sadece tek bir sorguda bunu nasıl hiçbir fikrim yok.

yardımcı olabilir mi?

3 Cevap

Böyle bir şey (sözdizimi işaretli değil) deneyebilirsiniz:

SELECT 
   class, 
   COUNT(distinct Table1.child), 
   SUM(IF(Table2.glasses='yes', 1, 0))
FROM Table1
LEFT JOIN Table2 ON Table1.child=Table2.child

Biraz hacky var ve bunu iki sorgularda bunu yapmak için sadece daha kolay bulabilirsiniz ama bu teknik bir çimdik benim için çalıştı

MySQL bunu böyle bir şey yapabilirsiniz:

SEÇ sınıf, COUNT (çocuk), TOPLA (EĞER (gözlük = 'evet', 1, 0)

O, sadece bir alternatif çözümdür, mükemmel bir çözüm değil

SELECT class AS a, COUNT( child ) AS b
FROM Table1
GROUP BY class
UNION ALL SELECT COUNT( table1.child ) AS a, Table1.class AS b
FROM Table1
LEFT JOIN Table2 ON Table1.child = Table2.child
WHERE Table2.glasses = 'yes'
GROUP BY Table1.class

Çıktısı:

a   b
art     1
math    3
1   art
2   math

Bu, biz daha fazla şey geliştirmek için bir fikir var olabilir.