Member 7909353 Ответов: 5

Как посчитать взрослого и ребенка из таблицы ration_card


Я хочу, чтобы подсчитать взрослого и ребенка в ration_card

ration_card (id, ration_card_number,имя,возраст)

insert into ration_card values('1','1001','ABC','50')
insert into ration_card values('2','1001','DEF','20')
insert into ration_card values('3','1001','GHI','5')
insert into ration_card values('4','1001','JK','10')

insert into ration_card values(5,1002,'ABC',50)
insert into ration_card  values(6,1002,'DEF',20)
insert into ration_card values(7,1002,'GHI',5)
insert into ration_card values(8,1002,'JK',10) 


Что я уже пробовал:

select count(name) as Adult from ration_card group by age having age>17

5 Ответов

Рейтинг:
2

Richard Deeming

Другой вариант:

SELECT
    Sum(CASE WHEN Age > 17 THEN 1 ELSE 0 END) As Adults,
    Sum(CASE WHEN Age <= 17 THEN 1 ELSE 0 END) As Children
FROM
    ration_card
;


0x01AA

А "= 17 " - это преходяще? :-)

Richard Deeming

Исправлено.

0x01AA

Проголосовавший.

Рейтинг:
2

W∴ Balboos, GHB

Ты усердно работаешь над этим.

Тебе что-то нужно любить

Выберите (выбрать количество(*) из ration_card где возраст &ГТ; 17) как для взрослых, (выбрать количество(*) из ration_card где возраст &ЛТ;= 17) как ребенок.

Ваша группа по возрасту не помогает, если вы не хотите, чтобы каждый возраст был изолирован. Это все усложняет.


Рейтинг:
1

Karthik_Mahalingam

select count(*) as Adult from ration_card where age> 17
select count(*) as Child from ration_card where age< 17


Рейтинг:
1

OriginalGriff

Попробуй:

SELECT Class, count(name) 
FROM (
      SELECT CASE WHEN age > 17 THEN 'Adults' ELSE 'Children' END AS Class, name 
      FROM ration_card) a
GROUP BY Class


W∴ Balboos, GHB

Я рассматриваю ваше решение против моего (#1). Также Ричард Диминг решение.

Я не DBA - поэтому мне интересно, что является наиболее / наименее эффективным? Для маленького столика это не имеет особого значения, но мне любопытно. Мое решение с вложенными выборками, вероятно, вряд ли будет первым в списке по эффективности.

Или это, более чем что-либо другое, Еще один пример различных решений одной и той же проблемы.

Рейтинг:
1

ProgrammingEnthusiast

WITH ration(Age)
 AS 
(   SELECT CASE WHEN age > 17 THEN 'Adult' ELSE 'Children' END AS Age
    FROM            ration_card
)
    SELECT Age, COUNT(Age) AS Count
     FROM ration
     GROUP BY Age