标签: group-by

如何通过'查询连接PostgreSQL'组中的字符串字段的字符串?

我正在寻找一种通过查询连接组内字段的字符串的方法.例如,我有一张桌子:

ID   COMPANY_ID   EMPLOYEE
1    1            Anna
2    1            Bill
3    2            Carol
4    2            Dave
Run Code Online (Sandbox Code Playgroud)

我想通过company_id分组得到类似的东西:

COMPANY_ID   EMPLOYEE
1            Anna, Bill
2            Carol, Dave
Run Code Online (Sandbox Code Playgroud)

mySQL中有一个内置函数来执行这个group_concat

sql postgresql group-by string-aggregation

329
推荐指数
9
解决办法
30万
查看次数

如何透视数据框

  • 什么是枢轴?
  • 如何转动?
  • 这是一个支点吗?
  • 长格式到宽格式?

我见过很多关于数据透视表的问题.即使他们不知道他们询问数据透视表,他们通常也是.几乎不可能写出一个规范的问题和答案,其中包含了旋转的所有方面....

......但是我要试一试.


现有问题和答案的问题在于,问题通常集中在OP难以概括以便使用一些现有的良好答案的细微差别.但是,没有一个答案试图给出全面的解释(因为这是一项艰巨的任务)

从我的谷歌搜索中查看一些示例

  1. 如何在Pandas中透视数据框?
    • 好问答.但答案只回答了具体问题,几乎没有解释.
  2. pandas将表转移到数据框
    • 在这个问题中,OP关注的是枢轴的输出.即列的外观.OP希望它看起来像R.这对熊猫用户来说并不是很有帮助.
  3. pandas转动数据框,重复行
    • 另一个体面的问题,但答案集中在一种方法,即 pd.DataFrame.pivot

因此,每当有人搜索时,pivot他们会得到零星的结果,而这些结果可能无法回答他们的具体问题.


建立

您可能会注意到,我明显地将我的列和相关列值命名为与我将如何在下面的答案中进行调整相对应.请注意,以便熟悉哪些列名称可以从哪里获得您正在寻找的结果.

import numpy as np
import pandas as pd
from numpy.core.defchararray import add

np.random.seed([3,1415])
n = 20

cols = np.array(['key', 'row', 'item', 'col'])
arr1 = (np.random.randint(5, size=(n, 4)) // [2, 1, 2, 1]).astype(str)

df = pd.DataFrame(
    add(cols, arr1), columns=cols
).join(
    pd.DataFrame(np.random.rand(n, 2).round(2)).add_prefix('val')
)
print(df)

     key   row   item   col  val0  val1
0   key0  row3  item1  col3  0.81  0.04
1   key1 …
Run Code Online (Sandbox Code Playgroud)

python pivot group-by pandas pandas-groupby

296
推荐指数
4
解决办法
2万
查看次数

GROUP BY和DISTINCT之间有什么区别吗?

前几天我学到了一些关于SQL的简单知识:

SELECT c FROM myTbl GROUP BY C
Run Code Online (Sandbox Code Playgroud)

结果与:

SELECT DISTINCT C FROM myTbl
Run Code Online (Sandbox Code Playgroud)

我很好奇,SQL引擎处理命令的方式有什么不同,还是它们真的是同一个东西?

我个人更喜欢不同的语法,但我相信它更多地出于习惯而不是其他任何东西.

编辑:这不是关于聚合的问题.的使用GROUP BY与聚合函数了解.

sql group-by distinct

291
推荐指数
13
解决办法
21万
查看次数

C#Linq Group By多列

public class ConsolidatedChild
{
    public string School { get; set; }
    public string Friend { get; set; }
    public string FavoriteColor { get; set; }
    public List<Child> Children { get; set; }
}

public class Child
{
    public string School { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }
    public string Friend { get; set; }
    public string Mother { get; set; }
    public string FavoriteColor { get; set; }
} …
Run Code Online (Sandbox Code Playgroud)

c# linq group-by aggregate

281
推荐指数
2
解决办法
47万
查看次数

如何使用一个SQL查询获取多个计数?

我想知道如何编写此查询.

我知道这个实际的语法是假的,但它会帮助你理解我想要的东西.我需要这种格式,因为它是一个更大的查询的一部分.

SELECT distributor_id, 
COUNT(*) AS TOTAL, 
COUNT(*) WHERE level = 'exec', 
COUNT(*) WHERE level = 'personal'
Run Code Online (Sandbox Code Playgroud)

我需要在一个查询中返回所有内容.

此外,它需要在一行,所以以下将不起作用:

'SELECT distributor_id, COUNT(*)
GROUP BY distributor_id'
Run Code Online (Sandbox Code Playgroud)

mysql sql join group-by count

278
推荐指数
8
解决办法
32万
查看次数

什么更快,MySQL中的SELECT DISTINCT或GROUP BY?

如果我有一张桌子

CREATE TABLE users (
  id int(10) unsigned NOT NULL auto_increment,
  name varchar(255) NOT NULL,
  profession varchar(255) NOT NULL,
  employer varchar(255) NOT NULL,
  PRIMARY KEY  (id)
)
Run Code Online (Sandbox Code Playgroud)

我希望获得所有独特的profession字段值,更快(或推荐):

SELECT DISTINCT u.profession FROM users u
Run Code Online (Sandbox Code Playgroud)

要么

SELECT u.profession FROM users u GROUP BY u.profession
Run Code Online (Sandbox Code Playgroud)

mysql sql database group-by distinct

269
推荐指数
8
解决办法
17万
查看次数

列的原因在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中

可能重复:
SQL中的GROUP BY /聚合函数混淆

我收到了一个错误 -

列'Employee.EmpID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中.


select loc.LocationID, emp.EmpID
from Employee as emp full join Location as loc 
on emp.LocationID = loc.LocationID
group by loc.LocationID 
Run Code Online (Sandbox Code Playgroud)

这种情况符合Bill Karwin给出的答案.

修正以上,适合ExactaBox的答案 -

select loc.LocationID, count(emp.EmpID) -- not count(*), don't want to count nulls
from Employee as emp full join Location as loc 
on emp.LocationID = loc.LocationID
group by loc.LocationID 
Run Code Online (Sandbox Code Playgroud)

原始问题 -

对于SQL查询 -

select *
from Employee as emp full join Location as loc 
on emp.LocationID = loc.LocationID
group by (loc.LocationID) …
Run Code Online (Sandbox Code Playgroud)

sql group-by aggregate-functions

248
推荐指数
4
解决办法
60万
查看次数

熊猫数(不同)相当于

我使用pandas作为db替代品,因为我有多个数据库(oracle,mssql等),我无法为SQL等价物创建一系列命令.

我在DataFrame中加载了一些表,其中包含一些列:

YEARMONTH, CLIENTCODE, SIZE, .... etc etc
Run Code Online (Sandbox Code Playgroud)

在SQL中,要计算每年不同客户端的数量,请执行以下操作:

SELECT count(distinct CLIENTCODE) FROM table GROUP BY YEARMONTH;
Run Code Online (Sandbox Code Playgroud)

结果就是

201301    5000
201302    13245
Run Code Online (Sandbox Code Playgroud)

我怎么能在熊猫中做到这一点?

python group-by count distinct pandas

245
推荐指数
6
解决办法
31万
查看次数

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

我有一张看起来像这个来电者'makerar'的桌子

 cname  | wmname |          avg           
--------+-------------+------------------------
 canada | zoro   |     2.0000000000000000
 spain  | luffy  | 1.00000000000000000000
 spain  | usopp  |     5.0000000000000000
Run Code Online (Sandbox Code Playgroud)

我想为每个cname选择最大平均值.

SELECT cname, wmname, MAX(avg)  FROM makerar GROUP BY cname;
Run Code Online (Sandbox Code Playgroud)

但我会收到一个错误,

ERROR:  column "makerar.wmname" must appear in the GROUP BY clause or be used in an   aggregate function 
LINE 1: SELECT cname, wmname, MAX(avg)  FROM makerar GROUP BY cname;
Run Code Online (Sandbox Code Playgroud)

所以我这样做

SELECT cname, wmname, MAX(avg)  FROM makerar GROUP BY cname, wmname;
Run Code Online (Sandbox Code Playgroud)

但这不会给出意图的结果,并显示下面的错误输出.

 cname  | wmname |          max           
--------+--------+------------------------
 canada …
Run Code Online (Sandbox Code Playgroud)

sql group-by aggregate-functions postgresql-9.1

240
推荐指数
5
解决办法
27万
查看次数

MySQL之前按顺序排序

这里有很多类似的问题,但我认为没有充分回答这个问题.

我会从当前最流行的问题继续,并使用他们的例子,如果这没关系.

此实例中的任务是获取数据库中每个作者的最新帖子.

示例查询产生不可用的结果,因为它并不总是返回的最新帖子.

SELECT wp_posts.* FROM wp_posts
    WHERE wp_posts.post_status='publish'
    AND wp_posts.post_type='post'
    GROUP BY wp_posts.post_author           
    ORDER BY wp_posts.post_date DESC
Run Code Online (Sandbox Code Playgroud)

目前接受的答案是

SELECT
    wp_posts.*
FROM wp_posts
WHERE
    wp_posts.post_status='publish'
    AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author
HAVING wp_posts.post_date = MAX(wp_posts.post_date) <- ONLY THE LAST POST FOR EACH AUTHOR
ORDER BY wp_posts.post_date DESC
Run Code Online (Sandbox Code Playgroud)

不幸的是,这个答案简单明了,并且在很多情况下产生的结果不如原始查询那么稳定.

我最好的解决方案是使用表单的子查询

SELECT wp_posts.* FROM 
(
    SELECT * 
    FROM wp_posts
    ORDER BY wp_posts.post_date DESC
) AS wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author 
Run Code Online (Sandbox Code Playgroud)

我的问题是一个简单的问题: 无论如何在分组之前订购行而不诉诸子查询?

编辑:这个问题是另一个问题的延续,我的情况细节略有不同.您可以(并且应该)假设还有一个wp_posts.id,它是该特定帖子的唯一标识符.

mysql group-by sql-order-by

228
推荐指数
5
解决办法
31万
查看次数