Есть таблица, как вывести максимальную сумму по какому-либо параметру? СУБД mySQL
Например такая таблица
|id|par|
|1 | 2 |
|1 | 6 |
|2 | 2 |
|2 | 1 |
Получить такой id, у которого сумма всех par максимальна.
задан 30 ноя 2013 в 11:00
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
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 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