我是论坛和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
我想通过DIV,PROD和CUST来总结数量。一旦我得到了这些总计数量,我想通过DIV和PROD获取最大的SUM(QTY),但保留CUST字段。因此,上面的答案看起来像这样:
1 | x | 19| Sonic
请注意,我显然拥有一个更大的数据库,因此我将列出所有唯一的产品/部门组合,其中列出了max(sum()),大约600K行。
我在这里的代码让我得到了总和(QTY)的点,但现在我需要在保留CUST字段的同时拉出最大总和(QTY)的行。你能帮我吗?我发现了一些关于每组最大的信息,但不确定这是我应该使用的以及如何
SELECT DIV, PROD, CUST, SUM(QTY) as QTY
from table
GROUP BY
DIV,
PROD,
CUST
Order by
DIV,
PROD
编辑: 周杰伦的CTE方法对我有用,但我忘了提到我想创建一个表格。 CREATE或REPLACE TABLE不适用于CTE。使用CTE方法或不同方法创建表的任何方法?
谢谢!
答案 0 :(得分:2)
<强> 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)
OR
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;
现场演示
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;
现场演示
答案 1 :(得分:0)
您可以通过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)
答案 2 :(得分:0)
在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;
上查看它
答案 3 :(得分:-1)
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();
}