我想为所有具有相同标题的产品投影pid索引,因为我使用以下作为子查询.
产品(pid,标题)
SELECT p.title
FROM product p
group by title
HAVING ( COUNT(p.title) > 1 )
Run Code Online (Sandbox Code Playgroud)
这会输出重复的标题,但我如何预测pid的?
我有一个名为参与者的表,其中包含以下字段:
背景是与至少两个或更多参与者进行对话.我想找到一个仅由两个指定用户持有的对话,而对话中没有其他用户.
我想出了以下内容:
SELECT *
FROM participants
WHERE user_id = 1 OR user_id = 2
GROUP BY conversation_id
HAVING COUNT(*) = 1
Run Code Online (Sandbox Code Playgroud)
鉴于此内容
参与者表格图像http://s12.postimage.org/af4xrfoax/table.png
您可以看到用户1和2与用户3(对话1)共享对话,但也只有一个对话(对话2).
上面的查询实际上返回了正确的conversation_id(即2) - 但我不确定查询是否正确.当我说它HAVING COUNT(*) = 2返回对话1时,我不知道为什么.直觉上我使用了计数 - 如果设置为1似乎也可以工作 - 但我不确定它在这种情况下是做什么的.
查询是否正确?如果是这样,为什么?如果没有,我需要更改什么才能使其正常工作?
我有一组包含事务数据的对象.此数据集具有3级父子关系,其级别为:项目>阶段>事务.对于每个项目和阶段,将有多个交易.
class CostElement
{
string ProjectNumber { get; set; }
string Stage { get; set; }
string DerivedCostElement { get; set; }
DateTime? Date { get; set; }
decimal? Amount { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想要找到的是一个唯一的成本要素列表(DerivedCostElement),其中包含在任何给定单个项目中使用它的最大次数.即计算每个项目出现的阶段数,然后选择最大值.
到目前为止我尝试过的是:
//count all cost elements per project
var aggregateQuery = from ce in _costElements
group ce by new { ce.ProjectNumber, ce.Stage, ce.DerivedCostElement }
into g
select new
{
g.Key.DerivedCostElement,
g.Key.ProjectNumber,
g.Key.Stage
};
//select cost elements having max count
var countQuery = from …Run Code Online (Sandbox Code Playgroud) 有人可以帮助我,并告诉我如何插入BEETWEN在cakephp中有clausule
我的编码的例子:
$zaduzenja = $this->Zaduzenja->find('all',array(
'conditions' => array(
'Zaduzenja.placeno' => 0 ),
'fields' => array('Zaduzenja.obveznici_id', 'SUM(Zaduzenja.zaduzenje) as dug'),
'group' => 'Zaduzenja.obveznici_id HAVING array(dug BETWEEN ? AND ? => array('.$iznosOd,$iznosDo)'
));
Run Code Online (Sandbox Code Playgroud)
但这不起作用,我只想要计算列"挖"来检查Dug> = $ temp 1 AND Dug <= $ temp2,但这只能在有clausule的组中
这将给我所有独特的条目:
select distinct (origin, destination) from mytable
但是如何选择非唯一的所有路线呢?所以我得到关于这两个字段的共同行?
我有这个问题,我一直在努力,我找到的解决方案是每个Pecheur(渔夫)获得AVERAGE结果,是的,这有点可能是一个学校项目.我基本上需要每个渔民的名字和地址,每个渔民在每份合同(CONTRAT)上至少收取两项费用(FRAIS),并且在2000年至2002年期间每年平均需要2次捕鱼(贵重).必要的表列在from和JOIN中,我的问题是,我可以使用HAVING AVG(x)虽然x未列在Select也不在group by中,但只出现在FROM部分的表中.请注意,我没有真正的数据库来测试查询.
SELECT pecheur.NOM as nom_Pecheur,
pecheur.ADRESSE as adresse
FROM TP1_PECHEUR as pecheur
INNER JOIN TP1_CONTRAT as contrat on pecheur.ID_PECHEUR=contrat.ID_PECHEUR
INNER JOIN TP1_FRAIS_CONTRAT as frais_contrat on contrat.ID_CONTRAT=frais_contrat.ID_CONTRAT
INNER JOIN TP1_FRAIS as frais on frais_contrat.ID_FRAIS=frais.ID_FRAIS
INNER JOIN TP1_DECLARATION_PRISE as declaration_prise on pecheur.ID_PECHEUR=declaration_prise.ID_PECHEUR
INNER JOIN TP1_PRISE as prise on declaration_prise.ID_DECLARATION_PRISE=prise.ID_DECLARATION_PRISE
WHERE frais_contrat.ID IN ( SELECT TP1_FRAIS_CONTRAT.ID, COUNT(*) as NB_FRAIS
FROM TP1_FRAIS_CONTRAT
GROUP BY TP1_FRAIS_CONTRAT.ID
HAVING NB_FRAIS >= 2 )
AND declaration_prise.DATE_DECLARATION BETWEEN '01-01-2000' AND '31-12-2002'
GROUP BY nom_Pecheur
HAVING AVG(prise.NOMBRE_POISSON) > …Run Code Online (Sandbox Code Playgroud) 我创建了两个视图来帮助计算 user_diary_number,然后选择日记数 > 用户总 user_diary_number 平均值的用户。
两个视图如下:
create view user_diary_number as
(
select user_id,count( distinct diary_id ) as diary_num
from user_diary
group by user_id
);
Run Code Online (Sandbox Code Playgroud)
第二次使用havingand avg:
create view hw_diary as
(
select u.user_id, u.realname, ud.diary_num, school.school_name
from (user as u cross join user_diary_number as ud on u.user_id = ud.user_id )cross join school on u.school_id = school.school_id
having diary_num > avg(diary_num)
);
Run Code Online (Sandbox Code Playgroud)
现在的问题是什么,第二个视图只有 1 行结果。当然,我们有超过 1 个用户的日记数量 > 平均 diary_num。事实上,我总共有 251 篇日记和 103 个用户。一些用户有9、4、5本日记。但结果只有 1 个用户拥有 3 …
我有一个程序可以计算所有唯一的 [customerid] 值并将它们显示在 SELECT 列表中。我正在尝试使用 HAVING 子句对 [customerid] 进行排序,其中它只有“> 1”,但 SQL 不允许我在 HAVING 中使用 DISTINCT COUNT。在我看来,HAVING 应该与 COUNT 一起使用是有道理的,但它没有:
USE MyCompany;
GO
SELECT DISTINCT COUNT(customerid) AS NumberOfOrdersMade, customerid AS
CustomerID
FROM tblItems_Ordered
GROUP BY customerid
HAVING DISTINCT COUNT(customerid) > 1
GO
Run Code Online (Sandbox Code Playgroud) 我开始学习SQL Server,在msdn中找到的文档是这样的
HAVING 通常与 GROUP BY 子句一起使用。当不使用 GROUP BY 时,存在一个隐式的单个聚合组。
这让我认为我们可以在没有 groupBy 子句的情况下使用having,但是当我尝试进行查询时我无法使用它。
我有一张这样的桌子
CREATE TABLE [dbo].[_abc]
(
[wage] [int] NULL
) ON [PRIMARY]
GO
INSERT INTO [dbo].[_abc] (wage)
VALUES (4), (8), (15), (30), (50)
GO
Run Code Online (Sandbox Code Playgroud)
现在,当我运行此查询时,出现错误
select *
from [dbo].[_abc]
having sum(wage) > 5
Run Code Online (Sandbox Code Playgroud)
错误:
select osmid,ST_X(shape),ST_Y(shape)
from osmpoints
where (osmpoints.osmid, osmpoints.osmtimestamp)
IN (select osmid,MAX(osmtimestamp)
from osmPoints
GROUP BY osmid
Having MAX(osmtimestamp) <= '2019-09-16T01:23:55Z'
AND osmid in ('4426786454','1861591896','1861591869','1861591895',
'4426786455','2038185115','1861591853','6797739995',
'2299605892','6797739994','1861591898','2038185111','4426786454'));
Run Code Online (Sandbox Code Playgroud)
当我运行这个查询时,我得到基于 osmid 列的排序行。但我的问题是如何按在 IN 子句中使用的 osmid 的顺序获取行?