Как найти максимальную сумму sql

Есть таблица, как вывести максимальную сумму по какому-либо параметру? СУБД mySQL

Например такая таблица

|id|par|  
|1 | 2 |
|1 | 6 |
|2 | 2 |
|2 | 1 |

Получить такой id, у которого сумма всех par максимальна.

задан 30 ноя 2013 в 11:00

whispeer's user avatar

whispeerwhispeer

8994 золотых знака12 серебряных знаков30 бронзовых знаков

1

Стандартное решение, которое даст правильный результат, если максимум достигается для нескольких id:

select id, sum(par) as par from t group by id 
having sum(par) >= ALL(
select sum(par) from t group by id
);

ответ дан 30 ноя 2013 в 16:59

msi's user avatar

select id, s 
 from ( select id, sum(pair) as s  
          from t group by id
        order by 2 desc) 
limit 1

ответ дан 30 ноя 2013 в 11:28

Andrew Frolov's user avatar

Andrew FrolovAndrew Frolov

1,1786 серебряных знаков11 бронзовых знаков

Есть таблица с данными:

| user_id | price |
--------------------
| 1        |   30      |
--------------------
| 1        |   20      |
--------------------
| 1        |   50      |
--------------------
| 1        |   70      |
--------------------
| 2        |   30      |
--------------------
| 2        |   30      |
--------------------
| 3        |   30      |
--------------------
| 3        |   5       |
--------------------

Хочу найти user_id у которого сумма столбцов price будет максимальной. Ответ будет:

| user_id | price |
--------------------
| 1        |   170      |
--------------------

Для достижения резульатат делаю запрос:

SELECT user_id, SUM(price) FROM `order` GROUP BY user_id ORDER BY SUM(price) DESC LIMIT 1;

Но может быть ситуация, что будет два user_id с максимальными суммами и суммы будут одинаковые:

| user_id | price |
--------------------
| 1        |   170      |
--------------------
| 4        |   170      |
--------------------

Как тогда будет выглядеть запрос? Типа такого:

SELECT o.user_id, MAX(found_sum) FROM (SELECT user_id, SUM(price) AS found_sum FROM 'order' GROUP BY user_id) AS o;

In order to find the highest purchase amount of each customer, we can use the GROUP BY clause which is very useful with aggregate functions. We use MAX() function with GROUP BY  to find the highest purchase of each customer.

In this article let us see SQL Query to Find the Highest Purchase Amount Ordered by Each Customer using MSSQL as a server.

Step 1: We are creating a Database. For this use the below command to create a database named GeeksforGeeks.

Query:

CREATE DATABASE GeeksforGeeks;

Step 2: To use the GeeksforGeeks database use the below command.

Query:

USE GeeksforGeeks

Output:

Step 3: Now we creating a table. Create a table customer_order_details with  4 columns using the following SQL query.

Query:

CREATE TABLE customer_order_details(
customer_id VARCHAR(20),
customer_name VARCHAR(20),
order_id VARCHAR(20),
order_price INT)

Output:

Step 4: The query for Inserting rows into the Table. Inserting rows into customer_order_details  table using the following SQL query.

Query:

INSERT INTO customer_order_details
VALUES( 'C1098','PRADEEP','O3006', 20000),
( 'C1098','PRADEEP','O3010', 5000),
( 'C1098','PRADEEP','O3016', 600),
( 'C1100','KIRAN','O3068', 1000),
( 'C1100','KIRAN','O3075', 200),
( 'C1195','PRANAV','O3072', 6000),
( 'C1195','PRANAV','O3045', 80000),
( 'C2026','BUTCHI RAJU','O3056', 100000),
( 'C2026','BUTCHI RAJU','O3058', 20000)

Output:

Step 5: Viewing the description of the table.

Query:

EXEC sp_columns customer_order_details

Output:

 Step 6: Viewing the inserted data

Query:

SELECT * FROM customer_order_details

Output:

  • Query to Find the Highest Purchase Amount Ordered by the Each Customer

Query:

SELECT customer_id , MAX(order_price) AS HighestPurchase
FROM customer_order_details
GROUP BY customer_id 
ORDER BY MAX(order_price) DESC

Output:

  • Query to find the number of orders ordered by each customer.

Query:

SELECT customer_id , COUNT(order_id) AS NoofOrders
FROM customer_order_details
GROUP BY customer_id

Output:

Last Updated :
08 Oct, 2021

Like Article

Save Article

Есть таблица, как вывести максимальную сумму по какому-либо параметру? СУБД mySQL

Например такая таблица

|id|par|  
|1 | 2 |
|1 | 6 |
|2 | 2 |
|2 | 1 |

Получить такой id, у которого сумма всех par максимальна.

Ответы (2 шт):

select id, s 
 from ( select id, sum(pair) as s  
          from t group by id
        order by 2 desc) 
limit 1

→ Ссылка

Автор решения: msi

Стандартное решение, которое даст правильный результат, если максимум достигается для нескольких id:

select id, sum(par) as par from t group by id 
having sum(par) >= ALL(
select sum(par) from t group by id
);

→ Ссылка

Я новичок в форуме и SQL и действительно оценил всю информацию. Я не мог найти решение, которое работает для меня, уже решено, поэтому думал, что я попробую здесь. Работаю в Снежинке. Мой набор данных выглядит следующим образом (извиняюсь за проблемное форматирование):

PO  | DIV | PROD |  QTY |   CUST
123 | 1  | x |  10 |    Sonic
234 |   1 | x   | 9 |   Sonic
345 | 1 |   x | 8   | McD
456 | 1 | x | 10    | Wendy's

Я хотел бы подвести итог по QTY по DIV, PROD и CUST. Как только я получу эти суммы, я хотел бы взять наибольшую SUM(QTY) по DIV и PROD, но сохранить поле CUST. Таким образом, ответ из приведенного выше будет выглядеть так:

1 | x | 19| Sonic

Просто обратите внимание, у меня, очевидно, гораздо большая база данных, чтобы у меня были все уникальные комбинации продукта / подразделения с указанным значением max(sum()), порядка 600 тыс. Строк.

Приведенный здесь код возвращает меня к точке, где у меня есть сумма (QTY), но теперь мне нужно вытянуть строку с максимальной суммой (QTY), сохраняя при этом поле CUST. Вы можете помочь? Я нашел некоторую информацию о самой большой-n-группе, но не был уверен, что это то, что я должен использовать и как

SELECT DIV, PROD, CUST, SUM(QTY) as QTY
from table
GROUP BY 
    DIV,
    PROD,
    CUST
Order by 
    DIV,
    PROD

РЕДАКТИРОВАТЬ:
Jay подход CTE работал для меня, но я забыл упомянуть, что я хотел бы создать таблицу из этого. СОЗДАТЬ ИЛИ ЗАМЕНИТЬ СТОЛ не работал с CTE. Есть ли способы создать таблицу с использованием подхода CTE или другого подхода?

Спасибо!

2018-03-27 05:03

4
ответа

MYSQL

SELECT `DIV`, PROD, CUST,QTY from 
(
SELECT `DIV`, PROD, CUST, SUM(QTY) as QTY from 
table1 
GROUP BY `DIV`, PROD, CUST Order by `DIV`, PROD
) AS T
WHERE QTY=(SELECT MAX(QTY) FROM (SELECT `DIV`, PROD, CUST, SUM(QTY) as QTY from 
table1 
GROUP BY `DIV`, PROD, CUST Order by `DIV`, PROD) AS T)

ИЛИ ЖЕ

SELECT `DIV`, PROD, CUST,QTY from 
(
SELECT `DIV`, PROD, CUST, SUM(QTY) as QTY from 
table1 
GROUP BY `DIV`, PROD, CUST Order by `DIV`, PROD
) AS T ORDER BY QTY DESC LIMIT 1;

Live Demo

http://sqlfiddle.com/

SQL SERVER

Использование CTE

WITH CTE AS
(
 SELECT DIV, PROD, CUST, SUM(QTY) as QTY,
 DENSE_RANK() OVER (PARTITION BY DIV, PROD ORDER BY SUM(QTY) DESC) AS Rank
 FROM 
 table1 
 GROUP BY DIV, PROD, CUST
)
SELECT DIV, PROD, CUST,QTY FROM CTE
WHERE Rank=1
ORDER BY DIV, PROD

Использование вложенного запроса

SELECT DIV, 
       PROD, 
       CUST,
       QTY 
FROM ( 
      SELECT DIV, PROD, CUST, SUM(QTY) as QTY, 
      DENSE_RANK() OVER (PARTITION BY DIV, PROD ORDER BY SUM(QTY) DESC) AS Rank
      FROM table1 
      GROUP BY DIV, PROD, CUST )AS T1 
 WHERE Rank=1 ORDER BY DIV, PROD;

Live Demo

http://sqlfiddle.com/

2018-03-27 05:05

Вы можете отфильтровать вашу совокупность sum(qty) с помощью having пункт

select 
       DIV, PROD, CUST, SUM(QTY) as QTY 
from table
group by DIV, PROD, CUST
having sum(QTY) = ( select max(QTY) from (
                    select sum(QTY) as QTY from table
                    group by DIV, PROD, CUST)a)

2018-03-27 05:48

Попробуйте это в MySQL:

SELECT A.`DIV`, A.PROD, IF(A.`DIV`=0,'NAN',A.AGG_QTY/A.`DIV`) QTY, A.CUST
FROM (SELECT `DIV`, PROD, CUST, SUM(QTY) AGG_QTY
      FROM `TABLE` 
      GROUP BY `DIV`, PROD, CUST
      ORDER BY SUM(QTY) DESC
      LIMIT 1) A;

Посмотрите, как он работает на SQL Fiddle

2018-03-27 05:55

private void button2_Click(object sender, EventArgs e)
{
    string selectQuery = "SELECT `username`, `password` FROM `users` WHERE `username` = '"+ username.Text + "' AND `password` = '" + password.Text +"';";
    MySqlDataAdapter adapter = new MySqlDataAdapter(selectQuery, DBConnect);
    DataTable table = new DataTable();
    adapter.Fill(table);
    if (table.Rows.Count <= 0)
    {
        // label_Message.ForeColor = Color.Red;
        // label_Message.Text = "Username Or Password Are Invalid";
        //timer1.Start();
        MessageBox.Show("Username Or Password Are Invalid");
    }
    else
    {
        //  panel1.Height = 0;
        //  label_Message.ForeColor = Color.Green;
        //  label_Message.Text = "Login Successfully";
        //   timer1.Start();
        MessageBox.Show("Login Successfully");
        admin1 admin1 = new admin1();
        admin1.Show();
        this.Hide();
    }
    table.Clear();
}

2018-03-27 06:04

Понравилась статья? Поделить с друзьями:
  • Как найти плечо силы графически
  • Как составить конструкцию скважины
  • Как найти свою страницу стим
  • Эксель как найти значение в другой таблице
  • Как правильно составить план продаж на год