Хотите улучшить этот вопрос? Переформулируйте вопрос, чтобы он соответствовал тематике «Stack Overflow на русском».
Закрыт 10 месяцев назад.
Есть данная таблица
Нужно вычислить среднюю продолжительность жизни у женщин и мужчин. Вывести в текстбокс.
Но есть проблема в составлении sql запроса..
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database777.mdb;";
conn.Open();
string my_querry = "SELECT AVG ([Дата рождения]) FROM [Новорожденные] where[Мужской]";
OleDbCommand cmd4 = new OleDbCommand(my_querry, conn);
count = (int)cmd4.ExecuteScalar();
AVG.Text = count.ToString();
conn.Close();
Avg текст бокс
UPD Решил последовать по самому последнему посту,пока что не получается
Вы не назвали базу, поэтому вот Вам запрос, который решает Вашу задачу для MS SQL:
SELECT [Пол], AVG(DATEDIFF(day,[Дата смерти],[Дата Рождения])) AS 'Duration'
FROM [Умершие]
GROUP BY [Пол]
Соответственно для для каждого пола он выводит среднюю продолжительность в днях. Если Вам продолжительность нужна в других величинах, то это делается с помощью первого параметра функции DATEDIFF. Вот ссылка на ее описание https://msdn.microsoft.com/ru-ru/windows/desktop/ms189794
P.S. Screen теста:
P.P.S.: Добавляю по Ваше просьбе пример фрагмента кода для чтения данных:
OleDbDataReader dr;
dr=cmd5.ExecuteReader();
while( dr.Read )
{
string gender = dr.GetString(0); //род - колонка с номером 0
int duration = dr.GetInt32(1); //Продолжительность - колонка с номером 1
}
В Вашем случае этот цикл сработает дважды. Поскольку Вы не дали своего кода, то встраивать чтение данных Вам придется самому. Естественно, что это все должно быть в скобочках try {} catch().
Еще одно замечание - номера полей, которые используются как аргументы в функции dr.GetString(...) и dr.GetInt32(...), могут быть вычислены с помощью функции dr.GetOrdinal("Пол"); и dr.GetOrdinal("Duration");
Полезные ссылки на тему OleDbDataReader:
https://docs.microsoft.com/ru-ru/dotnet/api/system.data.sqlclient.sqlcommand.executereader?view=netframework-4.7.2
https://metanit.com/sharp/adonet/2.6.php
Не самый лучший, но рабочий вариант. В параметр функции передаёшь значение пола, функция возвращает массив со всеми вычисленными значениями возраста определённого пола. А уже потом делишь сумму массива на количество элементов. В идеале, конечно, всё это делать сразу через функции SQL.
upd: убрал "обёртку" php, оставил шаблон sql-запроса
SELECT [Пол], [Дата рождения], [Дата смерти],
(YEAR([Дата смерти])-YEAR([Дата рождения]))-(RIGHT([Дата смерти],5)
<RIGHT([Дата рождения],5)) AS [Возраст] FROM [Люди]
WHERE [Пол] = '{входной параметр функции}'
Продвижение своими сайтами как стратегия роста и независимости