Select deyimi içinde alt sorgu kullanma

2 Cevap php

Ben aşağıdaki tabloyu çıktılar bir sorgu var:

(0) Age <= 19----------76-------0.12 

(1) Age 20 – 24--------661------1.06 

(2) Age 25 – 29-------4060------6.53 

(3) Age 30 – 34-------7231------11.64 

(4) Age 35 – 39-------9281------14.94 

(5) Age 40 – 44-------9539------15.35 

Total ----------------30848 -----49.65

İlk sütun, belirli bir kesim adıdır. İkinci sütun bu segment insan sayısıdır.

Üçüncü kolon tüm tablo bir yüzdesi olarak bu segment insan sayısıdır. Toplam, tüm baz sadece yaklaşık% 50 olduğunu not edin.

Ne yapmam gerekiyor, sadece bu tabanın bir yüzdesi olarak segmentinde insanların yüzdesi başka bir sütundur. Yani ilk satır için formül 30848 yüzdesi olarak 76 verecek olan (76/30848) * 100 olacaktır. Sorun sayısı 30848 ROLLUP kullanarak sorgunun sonuna kadar bilinir olmasıdır. Bunu nasıl yapıyor hakkında gitmek istiyorsunuz?

2 Cevap

Ben ilk sorgu tercih, ancak veritabanı bunu desteklemiyor olabilir.

SELECT
  segment,
  COUNT(*) AS people,
  100 * people / SUM(people) OVER () AS percentage
FROM table1
GROUP BY
  segment;

SELECT
  t1.segment,
  COUNT(*) AS people,
  100 * t1.people / t2.total_people AS percentage
FROM table1 t1
CROSS JOIN (
    SELECT
      COUNT(*) AS total_people
    FROM table1) t2
GROUP BY
  segment;

Ben cevap ile biraz kafam karıştı. Belki biraz daha iyi düzenini açıklamak gerekir.

Bu 20-24 ve 30-34 yaş iki grupta herkes için sonuç üreten bir sorgu.

SELECT CONCAT('(',s.code,') ',s.description) as `Segment`, count(`Age`) AS `Records Selected`, 
ROUND((count(`Age`)/(SELECT count(*) FROM mainTable))*100, 2) 
AS `Percentage of Total`
FROM segment_fields s, mainTable c 
WHERE `segment` = 'Age' AND `code` = `Age` AND `c`.`Age` IN ('1', '3') 
GROUP BY `Age` WITH ROLLUP

O kadar dağınık görünüyor üzgünüm. Esasen ben sadece "toplamının yüzdesi" olarak aynı olacak "toplamının yüzdesi" sonra yeni bir sütun gerekir. Ama bunun yerine bütün tabanına bölünmesi yalnızca bu ROLLUP sorgular sonucu kayıtların sayısına göre böleceğiz.