标签: aggregate-functions

mysql 中两列的 MAX

我想知道是否有更好的方法从 c1 列获取 max,然后从 c2 列获取所选行的 max

SELECT MAX(c1) , MAX(c2) FROM t GROUP BY c1 HAVING c1 = MAX(c1)
Run Code Online (Sandbox Code Playgroud)

mysql sql query-optimization aggregate-functions

0
推荐指数
1
解决办法
5683
查看次数

如何在pyspark中动态聚合列

pct_<original_name>_valid我想计算每个输入列的非缺失值的百分比。在此示例中只有 2 列,因此可以轻松手动编写下面的代码。但是当有 30 多个列时,我不想手动执行此操作。甚至可以动态地执行此操作吗?(例如,将列名称列表作为输入)

import pyspark.sql.functions as F

d = [{'name': 'Alice', 'age': 1}, {'name': 'Bae', 'age': None}]
df = spark.createDataFrame(d)

df.withColumn('name_valid', F.when(col("name").isNotNull(),1).otherwise(0))\
.withColumn('age_valid', F.when(col("age").isNotNull(),1).otherwise(0))\
.agg(
    (100.0*F.sum(col("name_valid"))/F.count(F.lit(1))).alias("pct_name_valid"),
    (100.0*F.sum(col("age_valid"))/F.count(F.lit(1))).alias("pct_age_valid")
)\
.show()
Run Code Online (Sandbox Code Playgroud)

结果如下:

+--------------+-------------+
|pct_name_valid|pct_age_valid|
+--------------+-------------+
|         100.0|         50.0|
+--------------+-------------+
Run Code Online (Sandbox Code Playgroud)

如前所述,我不想对所有 30 多个列手动执行此操作。有什么办法我可以这样做:

my_output = calculate_non_missing_percentage(df, my_columns = ["name", "age", "gender", "school", "color"])
Run Code Online (Sandbox Code Playgroud)

aggregate-functions pyspark

0
推荐指数
1
解决办法
3359
查看次数

PostgreSQL Json_build_object / json_agg 添加聚合级别

我使用的是 PostgreSQL 10.4,由 Visual C++ build 1800,64 位编译;

下面的查询产生一个 1 列的结果集,类型为 JSON 和多行,我要求查询将每一行返回到一个数组(基本上是 1 行和 1 列)中,例如 json_agg()。

不幸的是,如果我将 json_agg() 放在 json_build_object 周围,我会收到一个错误,这是不可能的:

ERROR:  aggregate function calls cannot be nested
LINE 28:  '$values', json_agg(fv.*)
Run Code Online (Sandbox Code Playgroud)
SELECT json_build_object(
    'id', vl.id,
    'id_form', vl.id_form,
    'id_waardenlijst', vl.id_waardenlijst,
    '$values', json_agg(fv.*)
) FROM var_list vl
    LEFT JOIN testscheme.form_values fv
    on fv.id_form_record = vl.id
    GROUP BY vl.id, vl.id_form, vl.id_waardenlijst
Run Code Online (Sandbox Code Playgroud)

如何添加另一层聚合,返回 1 列和 1 行以及我想要的对象数组?

我希望我很清楚!

sql arrays postgresql json aggregate-functions

0
推荐指数
1
解决办法
2108
查看次数

了解 Sum(1) sum(2) sum(3)

考虑下表,其中一列有 10 条记录。我不明白如何

SUM(1) gives output 10
SUM(2) gives output 20
SUM(3) gives output 30

create table test_a4(idCol numeric);
insert into test_a4(idCol) values (1),(2),  (3),  (4), (5) , (6), (7), (8), (9) , (10)
Select SUM(1) FROM test_a4 -- SUM(1) gives output 10
Select SUM(2) FROM test_a4 -- SUM(2) gives output 20
Select SUM(3) FROM test_a4 -- SUM(3) gives output 30
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sum aggregate-functions

0
推荐指数
1
解决办法
2万
查看次数

如何在一行中按顺序对所有项目的总金额进行分组

我需要计算订单中所有项目的总金额,我使用了STRING_AGG()但输出将金额划分为多行。

这是 SELECT 语句:

    SELECT b.order_id as 'Order Id',
       string_agg(e.testname,CHAR(13)) as 'Test',
       string_agg(d.PRICE,CHAR(13))  as 'Price',
       string_agg(d.test_vat,CHAR(13))  as '15% Vat',
       sum(convert(float,d.TOTAL_AMOUNT)) as 'Total'
     
  FROM patients a , lab_orders b ,customers c , order_details d , labtests e  
  where a.patient_no = b.patient_no 
  and b.custid = c.custid
  and b.order_id = d.order_id 
  and d.testid = e.testid
  and b.ORDER_ID=2000000272
  
  group by   b.order_id , d.TOTAL_AMOUNT
Run Code Online (Sandbox Code Playgroud)

输出 :

Order Id    Test                                 Price       15% Vat        Total
2000000272  (TSH) Free T3 (FT3) Free T4 (FT4)   90 90 …
Run Code Online (Sandbox Code Playgroud)

sql sql-server string inner-join aggregate-functions

0
推荐指数
1
解决办法
41
查看次数

为什么 T-SQL CROSS APPLY 有时表现得像 LEFT JOIN

我读过的大多数文档都表明,CROSS APPLY 的行为方式与 INNER JOIN 类似,只有在两个源表中都有匹配的行时,行才会包含在输出中。

然而,情况似乎并不总是如此,例如,如果您运行以下 SQL 查询,结果将包含 3 行,其中一行包含许多 NULL,因为右侧表中没有行:

CREATE TABLE #Order
(
    Id          int PRIMARY KEY
)

CREATE TABLE #OrderItem
(
    OrderId     int NOT NULL,
    Price       decimal(18, 2) NOT NULL
)

INSERT INTO #Order
VALUES(1), (2), (3)

INSERT INTO #OrderItem
VALUES(1, 10), (1, 20), (3,100)

SELECT *
FROM #Order o
CROSS APPLY
(
    SELECT SUM(Price) AS TotalPrice, COUNT(*) AS Items, MIN(Price) AS MinPrice
    FROM #OrderItem
    WHERE OrderId = o.Id
) t

DROP TABLE #Order
DROP TABLE …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server aggregate-functions cross-apply

0
推荐指数
1
解决办法
2246
查看次数

为某些列选择DISTINCT,为其他列选择最小值(什么是`Group by`?)

我有一个TableA有两列的表:MyName nvarchar(100)MyDateTime DateTime.每个MyName具有不同DateTimes的记录可以有多个.我试图返回一个记录集,其中包含MyName表中的每个值,每个值最早MyDateTime.

这可以返回不同的MyNames:

SELECT DISTINCT([MyName]) FROM TableA
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的UNION语句,但我的所有尝试都被DISTINCT()关键字抛弃了.例如,以下查询会查找所有时间,而不仅仅是每个时间的最小值:

SELECT DISTINCT([MyName]), [MyDateTime] FROM TableA
Run Code Online (Sandbox Code Playgroud)

努力想出正确的SQL语法来实现这一目标.有什么帮助吗?

sql aggregate-functions sql-server-2008-r2

-1
推荐指数
1
解决办法
1663
查看次数

对具有相同ID的行求和

以下是我必须使用的示例.

样本数据 :

 ID  RANK
---------
 1    2
 1    3
 2    4
 2    1
 3    2
 2    3
 4    2
Run Code Online (Sandbox Code Playgroud)

SQLFiddle

我试图与像行合并IDS和sumRANK这些小号IDs转换为单排:

ID  SUM(rank)
1      5
2      8
3      2
4      2
Run Code Online (Sandbox Code Playgroud)

sql sql-server group-by aggregate-functions

-1
推荐指数
1
解决办法
516
查看次数

如何从列中获取唯一名称

我只需要从城市中获取唯一的名称:

table: cities

+----+--------+
| id |  name  |
+----+--------+
|  1 |  Rawal |
+----+--------+
|  2 |  Nina  |
+----+--------+
|  3 |  Monte |
+----+--------+
|  4 |  Nina  |
+----+--------+
|  5 | Samina |
+----+--------+
Run Code Online (Sandbox Code Playgroud)

我只需要获得独特的名字,例如Rawal,Monte和Samina.

SELECT DISTINCT name FROM cities
Run Code Online (Sandbox Code Playgroud)

还给出了Nina我不需要的东西.

mysql sql aggregate-functions

-1
推荐指数
1
解决办法
61
查看次数

属于同一日期的总条目

我的表中有两列。Column1包含日期时间条目,而 Column2 包含营养条目。有多个营养条目属于同一日期,例如:

图像

如何获得每天的营养价值总和?

例如,对于 4/17/2017,我想要的值为 9,对于 4/18/2017,它应该为 3。

sql oracle aggregate-functions

-3
推荐指数
1
解决办法
1万
查看次数

查找对购买次数最多的客户做出最高销售额的员工

我在数据库作业中遇到这个问题并需要回答这个问题:

哪位员工对购买次数最多的客户的销售额最高?

这些是我的数据库表 在此输入图像描述

这些是我尝试编写这个查询

--select Customers.Firstname,Products.Name,Sales.Quantity from Customers
--inner join Sales
--on Customers.CustomerId=Sales.CustomerId
--inner join Products
--on Sales.productId=Products.ProductId
--where Products.Name like 'Mobile'


--Select Customers.CustomerId,max(COUNT(Customers.CustomerId)) As Customecount,Emploees.EmploeeId,max(COUNT(Emploees.EmploeeId))as EmploeeeCount from Emploees
--inner join Sales
--on Emploees.EmploeeId=Sales.EmploeeId
--inner join Customers
--on Customers.CustomerId=Sales.CustomerId
--group by Customers.CustomerId,Emploees.EmploeeId            ,Count(Sales.productId)as productCount,Count(Emploees.EmploeeId)as emploeeCount,Count(Customers.CustomerId)as customerCount 

select  * from
(select Distinct Customers.CustomerId,Sales.productId,COUNT(Sales.productId)as CountProduct from Customers
inner join Sales
on Customers.CustomerId=Sales.CustomerId
inner join Emploees
on Emploees.EmploeeId=Sales.EmploeeId
group by Sales.productId,Emploees.EmploeeId,Customers.CustomerId,Sales.productId) as Result
--gr 
Run Code Online (Sandbox Code Playgroud)

但这些都不起作用

请帮我写这个查询。

sql sql-server group-by aggregate-functions

-3
推荐指数
1
解决办法
2749
查看次数