如何编写sql查询组?

时间:2017-02-02 18:29:12

标签: sql

我有一个ERD。但我想写一个SQL查询。 这意味着您可以选择由artdept分组的regroupid 11的artgrp的所有列。

我有这个:

Select *
From artgrp
Where regroudid = "11"
Group by artdept;

我的问题是:如何编写:按artdept的列选择artgrp组的所有列?

这是我的模特

enter image description here

2 个答案:

答案 0 :(得分:0)

分组依据用于识别数据集中的计数,最大值,最小值,平均值等。为了更清楚地说,例如你有汽车表与字段制造,颜色,价格。并且你想看到不同颜色的汽车数量(这将是不同颜色的集群)你可以使用以下查询

选择计数(1),按颜色从汽车组中选择颜色;
输出将如下所示 蓝3
灰色17
红色5

注意:您在分组中使用的任何列也将用于选择列。在上面的示例中,我使用颜色进行分组,如果添加更多字段,例如make,它将有两个集群(颜色,制作)输出将是

福特蓝3 福特格雷7
本田红5 本田格雷10

因此,您可以确定在对数据进行分组之前需要执行的功能,例如count,min,max,avg,rank等。如果您想要select子句中的所有字段,则必须使用分析函数。使用样本数据和预期输出编辑您的问题,如果需要,我也可以给您解答分析查询。

感谢您对问题进行编辑,样本数据将更加清晰,我仍然会继续了解我的理解。我在这里使用分析功能作为解决方案

uses System.Types, System.StrUtils ...;

procedure TFrmLoginServer.ServTetProfResourceReceived(const Sender: TObject;
  const AResource: TRemoteResource);
var
  ss: TStringDynArray;
begin
  ss := SplitString(AResource.Value.AsString, #13);
  aLogin := ss[0];
  aPassword := ss[1];
end;

你可以使用rank()或count(1)等代替ROW_NUMBER()。

答案 1 :(得分:0)

SELECT d.description, d.lifetime, d.name, COUNT(d.artdeptid) as Departments
FROM artgrp g INNER JOIN arddept d ON g.artdeptid = d.artdeptid
WHERE regroudid = "11"
GROUP BY d.description, d.lifetime, d.name