Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
5 / 5 / 4
Регистрация: 08.02.2015
Сообщений: 63
PostgreSQL

Обработка разультатов запроса

08.02.2015, 12:02. Показов 3884. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подключился к базе PostgreSql, создал запрос, получил таблицу в DataGridView. Можно ли теперь с этой таблицей работать как в Excel?
Что я имею в виду. Нужно посчитать значения, которые больше каких-либо значений, и вывести их процентное отношение от общего числа.
В Excel это выглядело бы вот так: =СЧЁТЕСЛИ(A1:A23;">5")/СЧЁТ(A1:A23).
Или же я должен проделать это запросом к базе и получить на выходе одну ячейку с результатом.
Если так, то мне нужно создать отдельный запрос для каждого критерия, правильно?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.02.2015, 12:02
Ответы с готовыми решениями:

Обработка GET запроса
Как принимать GET запрос от N-ого сервера, который после URL ставит не ? , а знак # , как его читать? как получать данные из GET параметров

Обработка GET-запроса
Доброго времени суток. На сервер посылается GET-запрос при помощи ajax. Как можно вернуть ответ пользователю? Т.е. для ajax указывается...

Обработка запроса
Добрый вечер. Нужна помощь в выполнении задания. Написать код который отображает данные запроса в query string

23
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
08.02.2015, 12:09
remizz, покажите структуру таблицы и уточните, что нужно посчитать.
0
5 / 5 / 4
Регистрация: 08.02.2015
Сообщений: 63
08.02.2015, 13:55  [ТС]
Нужно посчитать кол-во ячеек равных 140, 141, 160 и процентное соотношение к общему числу ячеек
Миниатюры
Обработка разультатов запроса  
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
08.02.2015, 16:14
Цитата Сообщение от remizz Посмотреть сообщение
посчитать кол-во ячеек равных 140, 141, 160 и процентное соотношение к общему числу ячеек
Полностью заполнять таблицу мне нет времени, но вот пример, тут общий принцип показан. Я думаю поймете, куда дальше двигаться.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using System.Data;
 
namespace ConsoleApplication3 {
    class Program {
        static void Main(string[] args) {
            DataTable dt = new DataTable();
            //Тут заполнение таблицы...
 
            //Количество ячеек в столбце "madehandvalue" со значением 140
            int count = dt.AsEnumerable().Where(row => (row.Field<int>("madehandvalue") == 140)).Count();
        }
    }
}
1
5 / 5 / 4
Регистрация: 08.02.2015
Сообщений: 63
10.02.2015, 05:41  [ТС]
К сожалению, с C# знаком всего несколько дней. Запрос создал методом copy/paste. С Вашим ответом так не получилось. Поэтому, как будет время, не могли бы Вы показать, как интегрировать Ваш код в мой:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Npgsql;
 
namespace BetSizing
{
    public partial class Form1 : Form
    {
        NpgsqlConnection conn = new NpgsqlConnection("server=127.0.0.1; database=HHH; user Id=postgres; password=XXX");
        public Form1()
        {
            InitializeComponent();
                
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            // Создадим новый набор данных
            DataSet datasetmain = new DataSet();
            // Очищаем набор данных
            datasetmain.Clear();
            // Sql-запрос
            NpgsqlCommand command = new NpgsqlCommand("SELECT   public.playerhandsflop.betpercentofpot,  public.playerhandsflop.madehandvalue,  public.playerhandsflop.playerhand_id FROM  public.playerhandsflop,  public.players,  public.playerhandstourneykeycolumns WHERE  public.players.playername = 'remizz77' AND   public.playerhandstourneykeycolumns.playerhand_id = public.playerhandsflop.playerhand_id AND   public.playerhandstourneykeycolumns.totalflopbets = 1 AND   public.players.player_id = public.playerhandstourneykeycolumns.player_id AND   public.playerhandsflop.madehandvalue >= 10", conn);
            command.CommandTimeout = 20;
            // Новый адаптер нужен для заполнения набора данных
            NpgsqlDataAdapter da = new NpgsqlDataAdapter(command);
            // Заполняем набор данных данными, которые вернул запрос
            da.Fill(datasetmain, "table1");
            // Связываем элемент DataGridView1 с набором данных
            dataGridView1.DataSource = datasetmain;
            dataGridView1.DataMember = "table1";
        }
 
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
 
        }
 
        private void chart1_Click(object sender, EventArgs e)
        {
 
        }
    }
}
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
10.02.2015, 14:10
Цитата Сообщение от remizz Посмотреть сообщение
не могли бы Вы показать, как интегрировать Ваш код в мой:
Могу. Но сначала вопрос: какие значения нужны из таблицы?
Цитата Сообщение от remizz Посмотреть сообщение
кол-во ячеек равных 140, 141, 160
140, 141 или 160? Или всех вместе? Или по отдельности?
0
5 / 5 / 4
Регистрация: 08.02.2015
Сообщений: 63
11.02.2015, 12:00  [ТС]
Вообще, мне хотелось бы иметь 3 окошка (в одном окне Form):

Окно №1
Процент ячеек со значением 140 в столбце №2 (madehandvalue) от общего числа ячеек в столбце №2.

Окно №2
То же самое для значения 141.

Окно №3
То же самое для значения 160.

Саму таблицу мне видеть не нужно.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
11.02.2015, 13:25
remizz, дайте готовую базу с таблицей, чтобы свою не создавать.
0
5 / 5 / 4
Регистрация: 08.02.2015
Сообщений: 63
11.02.2015, 13:31  [ТС]
Как это возможно? Она весит около 100ГБ.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
12.02.2015, 00:08
Цитата Сообщение от remizz Посмотреть сообщение
Как это возможно? Она весит около 100ГБ.
Создайте вспомогательную, с не таким большим размером.
0
5 / 5 / 4
Регистрация: 08.02.2015
Сообщений: 63
12.02.2015, 17:03  [ТС]
Вот backup базы, там другие значения (11, 27, 29, 42) - видно на рисунке.
0
5 / 5 / 4
Регистрация: 08.02.2015
Сообщений: 63
12.02.2015, 17:10  [ТС]
Вот backup базы, там другие значения (11, 27, 29, 42) - видно на рисунке.
Миниатюры
Обработка разультатов запроса  
Вложения
Тип файла: zip exp2.zip (68.6 Кб, 7 просмотров)
0
5 / 5 / 4
Регистрация: 08.02.2015
Сообщений: 63
17.02.2015, 05:35  [ТС]
insite2012, все в порядке? Или от меня еще что-то требуется?
0
5 / 5 / 4
Регистрация: 08.02.2015
Сообщений: 63
22.02.2015, 15:10  [ТС]
insite2012, будьте добры, ответьте. Какие-то проблемы или просто нет времени?
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
22.02.2015, 15:11
Цитата Сообщение от remizz Посмотреть сообщение
просто нет времени?
Именно так. Попробую ближе к вечеру посмотреть)
0
5 / 5 / 4
Регистрация: 08.02.2015
Сообщений: 63
13.03.2015, 13:43  [ТС]
Ну, вот, собственно, все получилось:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Npgsql;
 
namespace BetSizing
{
    public partial class Form1 : Form
    {
        NpgsqlConnection conn = new NpgsqlConnection("server=127.0.0.1; database=хххх; user Id=postgres; password=хххх");
        public Form1()
        {
            InitializeComponent();
                
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            // Создадим новый набор данных
            DataTable dt = new DataTable();
            dt.Clear();
            // Очищаем набор данных
            // Sql-запрос
            NpgsqlCommand command = new NpgsqlCommand("SELECT  public.playerhandsflop.betpercentofpot,  public.playerhandsflop.madehandvalue,  public.playerhandsflop.playerhand_id FROM  public.playerhandsflop,  public.players,  public.playerhandstourneykeycolumns WHERE  public.players.playername = 'remizz77' AND   public.playerhandstourneykeycolumns.playerhand_id = public.playerhandsflop.playerhand_id AND   public.playerhandstourneykeycolumns.totalflopbets = 1 AND   public.players.player_id = public.playerhandstourneykeycolumns.player_id AND   public.playerhandsflop.madehandvalue >= 140", conn);
            command.CommandTimeout = 200;
            // Новый адаптер нужен для заполнения набора данных
            NpgsqlDataAdapter da = new NpgsqlDataAdapter(command);
            // Заполняем набор данных данными, которые вернул запрос
            da.Fill(dt);
             //Связываем элемент DataGridView1 с набором данных
            dataGridView1.DataSource = dt;
           // dataGridView1.DataMember = "table1";
            double count140 = dt.AsEnumerable().Where(row => (row.Field<short>("madehandvalue") == 140)).Count();
            double count141 = dt.AsEnumerable().Where(row => (row.Field<short>("madehandvalue") == 141)).Count();
            double count160 = dt.AsEnumerable().Where(row => (row.Field<short>("madehandvalue") == 160)).Count();
            double count = dt.AsEnumerable().Where(row => (row.Field<short>("madehandvalue") != -140)).Count();
 
 
            textBox1.Text = string.Format("{0:p0}", count140 / count);
            textBox2.Text = (count141 / count).ToString("p0");
            textBox3.Text = (count160 / count).ToString("p1");
            textBox4.Text = (count / (count140 + count141 + count160)).ToString("p2");
            
        }
 
        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
 
        }
 
        private void chart1_Click(object sender, EventArgs e)
        {
 
        }
 
    }
}
Хотелось бы услышать компетентное мнение по поводу оптимальности кода вообще и по поводу оптимальности кода в следующем контексте:
мы загружаем таблицу в память (а таблица может быть большой). Не лучше ли с точки зрения использования системных ресурсов создать 4 запроса

1) количество ячеек со значением 140
2) ... 141
3) ... 160
4) общее количество ячеек (для случая, если там не только перечисленные значения)

ну и дальше те же арифметические операции.
0
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
13.03.2015, 14:00
remizz, вопрос, а если будут ячейки, со значением -140 ?
0
5 / 5 / 4
Регистрация: 08.02.2015
Сообщений: 63
13.03.2015, 14:36  [ТС]
Fene4ka_, не, не будут. Да и вообще это условность, так поиграться...
0
102 / 102 / 40
Регистрация: 24.01.2014
Сообщений: 1,242
13.03.2015, 14:55
remizz, мб уже проще проверять ячейки на null ?
Цитата Сообщение от remizz Посмотреть сообщение
не, не будут

Не по теме:

садясь на включенную плиту, кошка думает просто погреться

0
5 / 5 / 4
Регистрация: 08.02.2015
Сообщений: 63
13.03.2015, 15:28  [ТС]
Fene4ka_,
Цитата Сообщение от Fene4ka_ Посмотреть сообщение
remizz, мб уже проще проверять ячейки на null ?
или вообще не проверять
C#
1
            double count = dt.AsEnumerable().Count();
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.03.2015, 15:28
Помогаю со студенческими работами здесь

Обработка запроса
В html немножко понимаю, а php полный ноль. Помогите обработать результата запроса и вывести в html. Адрес для запроса: ...

Обработка GET-запроса
Здравствуйте. У меня есть вопрос. Читая мануалы по питону я так и не разобрался как работать с GET-запросами в CGI. Объясню все на...

Обработка get запроса
Здравствуйте. Через URL напрямую в адресную строку я присваиваю переменой &quot;page&quot; определенное значение исходя из которого и будет выводится...

Обработка GET-запроса
Здравствуйте, форумчане. Подскажите, как быть в таком вопросе: пишу приложение WEB-API. Разобрался как работать с CRUD. Но дальше с...

Обработка GET запроса
Всем привет, у меня возникли трудности с одинарными кавычками ' Например есть сайт, siti.ru на нем есть файл index.php, при запросе...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru