2012-01-07 23 views
5
Select * from Namelist; 
Name  Age 
Sathish 25 
Sathish 65 
Sathish 55 
Sathish 45 
Sathish 35 
Jana  55 
Jana  25 
Jana  10 
Bala  55 
Bala  26 

Verilen biçim için Yüzde değeri nasıl alınır?Grup sayısının yüzdesi hesaplaması (*)

Name Count Percentege 
Sathish 5  50% 
Jana  3  30% 
Bala  2  20% 

Lütfen sql sorgusunu paylaşın?

+1

Sathish - Eğer bu cevapların üzerine kabul etmek ister misiniz? Birkaç hafta oldu. Sizin için işe koyulduk - en azından bir tanesini kabul edersiniz ya da bunların hiçbirinin sizin için çalışmadığını söyleyiniz – Bohemian

+0

Bunu SQL üzerinde yapmayın (çok uzun zaman alacaktır), bunun yerine programlama dilinizi kullanın. –

cevap

2

Bu sorgu (test) çalışması gerekir:

SELECT Name, 
COUNT(*) AS Count, 
(COUNT(*)/_total) * 100 AS Percentege 
FROM Namelist, 
(SELECT COUNT(*) AS _total 
    FROM Namelist) AS myTotal 
GROUP BY Name; 
1

sütun adını değiştirip bu deneyin:

SELECT iName, 
    COUNT(iName) AS `Count`, 
    concat(FORMAT(((COUNT(iName) * 100)/NewPeople.iCount),2),'%') AS `Percentage` 
FROM people, (SELECT COUNT(iName) AS iCount FROM people) NewPeople 
GROUP BY iName; 

Çıktı:

Name Count Percentage 
Sathish 5  50.00% 
Jana  3  30.00% 
Bala  2  20.00% 
+0

AVG bir yüzde oluşturmaz - ortalama üretir! – ManseUK

1
select 
name, 
count(name) as `count`, 
count(name)/(select count(*) from namelist)*100 as pct 
from namelist 
group by name 
10

Bu biraz Bazı diğer cevapların daha seksi versiyonu önlemek için sum(100) e kullanımının daha uzun (ve daha sıradan) count(*) * 100 :)

select name, count(*) as count, sum(100)/total as percentage 
from namelist 
cross join (select count(*) as total from namelist) x 
group by 1 
+1

+1. Güzel çözüm. SQL'in cinsiyet çekiciliğini artırmak için –

+1

+1. :) –