我有一个SELECT语句是从一个CASE WHEN THEN状态(或者可以使用多个IF语句)别名为'Length'计算的,我需要正确地将结果组合在一起.SELECT似乎正在工作,但该组将它们分组错误.这是我的发言:
SELECT CASE
WHEN DATEDIFF(o.EndDate, o.StartDate) < 30 THEN '<1 Month'
WHEN DATEDIFF(o.EndDate, o.StartDate) < 90 THEN '1 - 2 Months'
WHEN DATEDIFF(o.EndDate, o.StartDate) < 210 THEN '3 - 4 Months'
ELSE '>4 Months' END AS 'Length',
COUNT(DISTINCT(person.ID)) AS 'COUNT'
FROM person
INNER JOIN opportunity AS o
INNER JOIN Organization AS org
ON person.EntityID = o.id
AND O.OrganizationID = Org.ID
WHERE person.TitleID = 2
AND o.bID = 1
GROUP BY 'Length'
ORDER BY 'Length' ASC;
Run Code Online (Sandbox Code Playgroud)
这将所有结果分组为'3 - 4个月',这是不对的..
我正在尝试使用下面的CASE子句将2行结果合并为1.'<26'应该只出现一次,结果应该合并.
SELECT
CASE org.size
WHEN 0 THEN '<26'
WHEN 1 THEN '<26'
WHEN 2 THEN '26-50'
WHEN 3 THEN '51-100'
WHEN 4 THEN '101-250'
WHEN 5 THEN '251-500'
WHEN 6 THEN '501-1000'
WHEN 7 THEN '1001-5000'
ELSE '5000+' END
AS 'Size',
COUNT(DISTINCT org.id) AS '# of Companies'
FROM org INNER JOIN usr ON usr.orgid = org.id
INNER JOIN usr_role ON usr.id = usr_role.usrid
WHERE org.deleted = 0 AND usr.brnd = 1 AND usr_role.role = 1
GROUP BY org.size;
Run Code Online (Sandbox Code Playgroud) 我读过这篇文章:http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/并搜索其他问题
我有一个表格,如:
| table.id | USER.id
----------------------------------------------
| 1 | 101
| 2 | 101
| 3 | 101
| 4 | 101
| 5 | 101
| 6 | 101
| 7 | 101
| 8 | 101
| 9 | 101
| 10 | 101
| 11 | 102
| 12 | 102
| 13 | 102
| 14 | 102
| 15 | 103
| 16 | 103
| 17 | 103
| …
Run Code Online (Sandbox Code Playgroud) 编写此查询的正确方法是什么?我的customers表中有一个名为TimeStamp的列.我在2012年尝试找到创建帐户的客户时遇到错误.我尝试过:
SELECT 'TimeStamp' AS CreatedDate
FROM customers
WHERE 'CreatedDate' >= '2012-01-01' AND 'CreatedDate' <= '2012-12-31'
Run Code Online (Sandbox Code Playgroud)
并且
SELECT *
FROM customers
WHERE 'TimeStamp' >= '2012-01-01' AND 'TimeStamp' <= '2012-12-31'
Run Code Online (Sandbox Code Playgroud)
并且总是没有结果(应该有数千)
在Google表格中,我试图编写一个查询(不是独立的数据透视表或脚本),它根据基于if/then语句的计算值进行分组。
这是我的示例数据:
Name Days
Bob 0
Ed 1
Frank 2
Joey 4
Deluth 7
Henry 12
Run Code Online (Sandbox Code Playgroud)
按 B 列分组相当简单:
=QUERY(A1:B7,"SELECT B, COUNT(B) GROUP BY B")
Run Code Online (Sandbox Code Playgroud)
其输出:
Days count
0 1
1 1
2 1
4 1
7 1
12 1
Run Code Online (Sandbox Code Playgroud)
但我想做的是将这些日子分组到特定的桶中。存储桶和所需的输出将是所需的输出:
Days count
0 1
1 1
2-5 2
6-9 1
10+ 1
Run Code Online (Sandbox Code Playgroud)
所以它几乎是“如果 0 那么 '0',如果 1 那么 '1',如果 >1 AND <=5 那么 '2-5' 等等,最后有一个 Group By?这将如何写成查询格式?
我正在尝试将2个完全不同的查询的数值结果相除。
最终结果应为查询1除以查询2
查询1 =
SELECT COUNT(DISTINCT(table1.ID)) AS count_1
FROM table1
INNER JOIN op
INNER JOIN Org
ON table1.EID = op.id
AND Op.OrgID = Org.ID
WHERE table1.TitleID = 123
AND op.BrandID = 1
AND op.Start <= NOW() AND op.End >= NOW();
Run Code Online (Sandbox Code Playgroud)
查询2 =
SELECT COUNT(DISTINCT user.id) AS count_2
FROM table1 INNER JOIN user INNER JOIN ur
ON table1.EID = user.id AND ur.userID = user.id
WHERE
user.BrandID = 1
AND table1.TitleID = 123
AND ur.role = 0
AND user.Inactive = 0;
Run Code Online (Sandbox Code Playgroud) 我有一个users
存储TIMESTAMP 的表,当他们的帐户被创建时.我正在尝试编写一个查询,该查询将显示在给定时间段内按周(按周一开始)分组的新用户.导演将进入并选择报告日期范围,因此选择2个变量.他们应该看到显示所有在2个选定变量日期之间注册的新用户的结果,按周(周的周一开始)分组
变量: @StartRangeSelectDate @EndRangeSelectDate
用户表:
| id | TIMESTAMP
----------------------------------------------
| 1 | 2013-09-02
| 2 | 2013-09-08
| 3 | 2013-09-12
| 4 | 2013-09-27
Run Code Online (Sandbox Code Playgroud)
结果应该是(当选择的开始日期类似于2013-09-01,结束日期是2013-09-29:
| YearWeek | # of New Users
----------------------------------------------
| 2013 36 | 2
| 2013 37 | 1
| 2013 38 | 0
| 2013 39 | 1
Run Code Online (Sandbox Code Playgroud)
查询以显示日期范围中的新用户总数,但尚未在日期范围内按周分组:
SELECT COUNT(user.id) AS '# of New Users in Date Range'
FROM user
WHERE user.Inactive = 0
AND user.TimeStamp BETWEEN @StartRangeSelectDate AND …
Run Code Online (Sandbox Code Playgroud) 使用MySql
我有以下变量(以"3"和"2014"为例):
SET @Month = 3;
SET @Year = 2014;
Run Code Online (Sandbox Code Playgroud)
期望的结果
I'd like to get the first day of the month and the last day of the month separately,
using the variables (avoiding any NOW() or CURDATE() formulas), in %Y-%m-%d format. In other words:
2014-03-01
2014-03-31
Run Code Online (Sandbox Code Playgroud)
我已经尝试了以下基本功能的许多可能性,加上一些我已删除
SELECT LAST_DAY(`SELECT(@Year)-03-01`)
SELECT LAST_DAY('@Year-@Month')
SELECT DATE_FORMAT(?, '%Y-%m-01')
Run Code Online (Sandbox Code Playgroud) mysql ×7
sql ×6
group-by ×3
case ×1
date ×1
date-range ×1
division ×1
if-statement ×1
inner-join ×1
linqpad ×1
time ×1
variables ×1