标签: query

创建 GroupBy 查询以在没有结果匹配时包含结果

假设我需要一个查询来按月查看销售结果,并且我希望结果集包含每个月的结果,无论该月是否有任何销售。

假设我的表“sales”有“sales_date”和“sales_amount”列,我希望结果集如下所示:

一月 100.00
二月 240.00
三月 0.00
四月 430.00

因此,如果我想按月对值求和并且没有任何 Mar 的记录,我仍然希望看到 Mar 的结果为 0。我该怎么做?

postgresql query

4
推荐指数
1
解决办法
1592
查看次数

如何选择/计算列中存在相同值但不在同一表中的其他列中的行

我有这个表结构和数据:

CREATE TABLE IF NOT EXISTS `default_relations_users` (
  `id_user_rq` int(11) NOT NULL,
  `id_user_ap` int(11) NOT NULL,
  UNIQUE KEY `rusers_rq_ap_idx` (`id_user_rq`,`id_user_ap`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

INSERT INTO `default_relations_users` (`id_user_rq`, `id_user_ap`) VALUES
(1, 2),
(1, 3),
(1, 4),
(2, 1),
(2, 2),
(2, 3);
Run Code Online (Sandbox Code Playgroud)

我只需要获取值在左侧但不在右侧的行,例如:将不会选择 1,2 和 2,1 但 1,3 和 1,4 是。我试试这个查询:

SELECT * FROM default_relations_users
WHERE default_relations_users.id_user_rq = 1 
 AND NOT EXISTS (SELECT id_user_ap FROM default_relations_users WHERE id_user_ap = 1) 
Run Code Online (Sandbox Code Playgroud)

也许我不明白子查询是什么意思,或者我以错误的方式使用。所以有什么帮助吗?

mysql query subquery

4
推荐指数
1
解决办法
5万
查看次数

在 SQLITE 中将多行中的列合并为一行

我有一个带有架构的 sqlite 数据库

Articles
 Id
 Name

Tags
 Id
 Name

ArticlesTags
 Id
 ArticleId
 TagId
Run Code Online (Sandbox Code Playgroud)

我正在尝试查询 Articles.Name 和标签列表。基本上我想要的是:

Name1, (tag1,tag2,tag3)
Name2, (tag3,tag2)
Run Code Online (Sandbox Code Playgroud)

这可能吗?我缺乏语言来解释我真正想做的事情,它叫什么?

我发现将多行中的列合并为单行,但它似乎仅限于 SQLServer 和内置 xml 功能的使用。

sqlite join query

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

SQL Server 2008:使用 AVG() 和内部联接

这是我到目前为止所拥有的。我知道这有效,但我需要获得 和 的平均值,pulsedepressionlevel不是为每一行返回实际值:

SELECT
  Patients.LastName
  , PatientVisit.Pulse AS [avg Pulse]
  , PatientVisit.DepressionLevel AS [avg Deplevel]
FROM Patients
    INNER JOIN PatientVisit on Patients.PatientKey = PatientVisit.PatientKey
ORDER BY
  Patients.LastName
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 query

4
推荐指数
1
解决办法
1884
查看次数

对此的替代查询(避免 DISTINCT)

注意:我使用 MSSQL 2008,但我想它对许多其他数据库引擎有效 我有这个表“用户”:

用户 ID 用户国家 ID
1 用户 1 1
2 用户 2 2
3 用户 3 3
4 用户 4 4
5 用户 5 4
6 用户 6 3

而这张表“国家”

CountryID 国家
1 MX
2 美国
3 CAN
4 英格兰

如您所见,每个用户都属于一个国家。

如果我想知道,我在用户表上至少拥有一个用户的所有不同国家/地区,现在我执行以下查询:

select distinct country 
from Users inner join
countries on users.CountryID=countries.CountryID
Run Code Online (Sandbox Code Playgroud)

并实现下一个结果集:

能够
英国
MX
美国 

这确实是所有不同的国家,其中我在 muy 表 Users 上至少有一个用户。

我的疑问是,是否可以在不使用“DISTINCT”的情况下实现上述结果集,我的意思是只使用 JOINS 和条件?

这是 de DDL 脚本:

使用 [测试]
走
/****** 对象:表 [dbo].[用户] 脚本日期:09/21/2012 16:21:14 …

sql-server-2008 join query query-refactor

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

使用 SQL 查找仅与特定列表中的值匹配的行

我有一张这样的表:

  Id    Status
  --    -----------
  1     Closed
  1     In progress
  2     Rejected
  3     Cancelled
  4     Rejected
  4     Closed
  5     In progress
Run Code Online (Sandbox Code Playgroud)

我想说明,有行Status封闭拒绝取消。但是,我想排除具有不同状态值的 ID,即使它们也具有这三个中的任何一个。

所以,对于我的例子,我希望输出是这样的:

  Id    Status
  --    ---------
  2     Rejected
  3     Cancelled
  4     Rejected
  4     Closed
Run Code Online (Sandbox Code Playgroud)

我的查询应该是什么样的?

query except

4
推荐指数
1
解决办法
338
查看次数

SQL 对查询?

我只有一张表,其中包含 3 列旅行公司。它显示了从 A 市到 B 市等地的公共汽车。我想知道这条路线被使用了多少次。我可以很容易地找到从 A 到 B 的一种方法,但我希望这个程序在同一行中从 B 到 A 自动求和。

在这种情况下,AB等同于BA。要求是为任意两个任意(和不同的)点和)获得 (( Xto Y) + ( Yto X))的 COUNT 。XY

示例表

ID | FROM | TO 
1  |  A   | B
2  |  C   | D
3  |  B   | A
4  |  C   | A
5  |  D   | C
Run Code Online (Sandbox Code Playgroud)

答案应该是

Route AB = 2
Route CD = 2
Route …
Run Code Online (Sandbox Code Playgroud)

query

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

如何使用 GROUP BY 从 JOIN 更新

SELECT查询中

SELECT b.id, MIN(IFNULL(a.views,0)) AS counted 
FROM table1 a JOIN table2 b ON a.id=b.id GROUP BY id 
HAVING counted>0
Run Code Online (Sandbox Code Playgroud)

我怎么能拒绝此查询UPDATE作为

UPDATE b.number = counted
Run Code Online (Sandbox Code Playgroud)

mysql join query update group-by

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

提取表中包含少于 x NULL 的行

我正在使用包含大量 NULL 的 SQL Server 数据库。为了分析我的数据,我想提取数据库表的所有行,包括少于 x 个 NULL 标记(例如 x=2)。

我的数据库类似于这个结构:

 c1        c2      c3      c4        c5        
-----------------------------------------------------
2          3       NULL    1         2
2          NULL    NULL    1         2
2          3       NULL    NULL      2
NULL       3       NULL    1         NULL
2          3       NULL    1         2
Run Code Online (Sandbox Code Playgroud)

我尝试了查询,它没有返回错误,但没有选择任何行:

SELECT * FROM test123 
WHERE ((ISNULL(c1,1) + ISNULL(c2,1) + ISNULL(c3,1) + ISNULL(c4,1) + ISNULL(c5,1)) < 2);
Run Code Online (Sandbox Code Playgroud)

我希望此查询返回第一行和第五行,但结果包含 0 行。


我无法测试以下代码,因为我没有在数据库上写入的权限,但这里有一个(伪)代码,用于创建像我这样的表:

CREATE TABLE test123(
    c1 float,
    c2 float,
    c3 float,
    c4 float,
    c5 float
) GO
INSERT …
Run Code Online (Sandbox Code Playgroud)

sql-server query isnull

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

SQL查询在使用where 1条件时返回相同的值

我创建了一个临时表并插入了如下所示的值。

create table #temp( val int );

insert into #temp values(333);
insert into #temp values(222);
insert into #temp values(111);
Run Code Online (Sandbox Code Playgroud)

在查询下面的 select 语句时,我得到了 333 作为答案。

Select * 
from #temp a 
Where 1 =(
    Select COUNT(VAL) 
    from #temp b 
    where a.val <= b.val
);
Run Code Online (Sandbox Code Playgroud)

结果:

val

333
Run Code Online (Sandbox Code Playgroud)

您能否帮助我了解 SQL Server 是如何使用此解决方案的。

sql-server query

4
推荐指数
1
解决办法
962
查看次数