Tag: 聚合函数

MySQL:selectN行,但在一列中只有唯一的值

鉴于这个数据集: ID Name City Birthyear 1 Egon Spengler New York 1957 2 Mac Taylor New York 1955 3 Sarah Connor Los Angeles 1959 4 Jean-Luc Picard La Barre 2305 5 Ellen Ripley Nostromo 2092 6 James T. Kirk Riverside 2233 7 Henry Jones Chicago 1899 我需要find三个最古老的人,但每个城市只有一个。 如果它只是三个最古老的,那将是… 亨利琼斯/芝加哥 Mac Taylor /纽约 Egon Spengler /纽约 然而,由于Egon […]

在WHERE子句中使用mysql SUM()

假设我有这张桌子 id | cash 1 200 2 301 3 101 4 700 我想要返回所有以前的现金总和大于某个值的第一行: 例如,如果我想返回所有以前的现金的总和大于500的第一行,则返回到第3行 我如何使用mysql语句来做到这一点? 使用WHERE SUM(cash) > 500不起作用

在Postgresql中统计累计总数

我使用count和group by来获取每天注册的用户数量: SELECT created_at, COUNT(email) FROM subscriptions GROUP BY created at; 结果: created_at count —————– 04-04-2011 100 05-04-2011 50 06-04-2011 50 07-04-2011 300 我想每天都得到用户的累计总数。 我如何得到这个? created_at count —————– 04-04-2011 100 05-04-2011 150 06-04-2011 200 07-04-2011 500

如何在COUNT聚合中包含“零”/“0”?

我刚刚得到了一些SQL的困扰。 我不认为我可以出色地提出这个问题 – 所以让我给你看看。 我有两张桌子,一个叫人,一个叫约会。 我试图返回一个人的约会数量(包括如果他们有零)。 约会包含person_id ,每个约会都有一个person_id 。 所以COUNT(person_id)是一个明智的方法。 查询: SELECT person_id, COUNT(person_id) AS "number_of_appointments" FROM appointment GROUP BY person_id; 将正确返回一个person_id具有的约会的数量。 然而,一个没有任命的人不会被退回(显然,因为他们不在该表中)。 调整声明,从人表采取person_id给我这样的: SELECT person.person_id, COUNT(appointment.person_id) AS "number_of_appointments" FROM appointment JOIN person ON person.person_id = appointment.person_id GROUP BY person.person_id; 但是,这仍然只会返回一个person_id有预约的人,而不是我想要的,这是一个有约会的人的回报! 有什么build议吗?

SQL OVER()子句 – 何时以及为何有用?

USE AdventureWorks2008R2; GO SELECT SalesOrderID, ProductID, OrderQty ,SUM(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Total' ,AVG(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Avg' ,COUNT(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Count' ,MIN(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Min' ,MAX(OrderQty) OVER(PARTITION BY SalesOrderID) AS 'Max' FROM Sales.SalesOrderDetail WHERE SalesOrderID IN(43659,43664); 我读了关于这个条款,我不明白为什么我需要它。 这个functionOver做什么? Partitioning By做什么的? 为什么我无法通过编写Group By SalesOrderID进行查询?

SQL Server:PARTITION BY和GROUP BY之间的区别

多年来,我一直在使用GROUP BY来处理所有types的聚合查询。 最近,我已经反编译了一些使用PARTITION BY来执行聚合的代码。 在阅读关于PARTITION BY所有文档时,它听起来很像GROUP BY ,可能是添加了一些额外的function? 它们是相同的一般function的两个版本,还是完全不同的?

将一列中的多个结果行连接成一列,按另一列分组

我有这样的桌子 Movie Actor A 1 A 2 A 3 B 4 我想获得电影的名称和该电影中的所有演员的名字,我希望结果是这样的格式: Movie ActorList A 1, 2, 3 我该怎么做?

获取连接表格列的不同总和

我在这里有一个问题,我希望有一个简单的解决scheme。 我会尽可能简单地做到这一点: 一张票属于一个参加者 例: select * from tickets JOIN attendees ON attendee.id = tickets.attendee_id 与会者有一个称为“收入”的小数列 也就是说,我需要运行一个查询,返回有关门票的各种信息,包括总收入。 问题是,如果2张门票属于同一个参与者,那么它会将收入计入两次。 我如何才能将与会者的收入总计一次? 我不想使用子查询,因为我的ORM使这很难。 另外一个子查询解决scheme不能缩放,如果我想这样做多个列。 这是我有: 1位参与者,收入为100美元 两张门票都属于该参与者 Select count(tickets.*) as tickets_count , sum(attendees.revenue) as atendees_revenue from tickets LEFT OUTER JOIN attendees ON attendees.id = tickets.attendee_id; =>这告诉我, attendees_revenue是200.我希望它是100.因为在数据库中有一个参与者与existing_revenue为100.我不希望与会者被重复计数。 请让我知道这是否可能。

在同一列上select多个WHERE条件

好吧,我想我可能忽略了一些明显/简单的东西…但是我需要写一个查询,只返回匹配同一列上的多个条件的logging。 我的表是一个非常简单的链接设置,用于将标志应用于用户… ID contactid flag flag_type ———————————– 118 99 Volunteer 1 119 99 Uploaded 2 120 100 Via Import 3 121 100 Volunteer 1 122 100 Uploaded 2 等等…在这种情况下,你会看到联系99和100被标记为“志愿者”和“上传”… 我需要做的只是返回那些仅仅匹配通过search表单input的多个标准的联系人…联系人必须匹配所有select的标志…在我的脑海中,SQL应该看起来像这样: SELECT contactid WHERE flag = 'Volunteer' AND flag = 'Uploaded'… 但是……没有任何回报……我在这里做错了什么?

必须出现在GROUP BY子句中或用于聚合函数中

我有一个表,看起来像这个调用者'makerar' cname | wmname | avg ——–+————-+———————— canada | zoro | 2.0000000000000000 spain | luffy | 1.00000000000000000000 spain | usopp | 5.0000000000000000 我想select每个cname的最大平均值。 SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname; 但我会得到一个错误, ERROR: column "makerar.wmname" must appear in the GROUP BY clause or be used in an aggregate function LINE 1: SELECT cname, wmname, […]