- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Customer table
customer_id|household_id|loyalty_member|gender|city|state|zip|phone_opt_in|email_opt_in|mail_opt_in
-----------------------------------------------------------------------------
Coupon Table
offer_code_used|offer_desc|channel|camp_code|coup_start|coup_end|total
------------------------------------------------------------------
transaction table
customer_id|trans_id|offer_code_used|trans_date|trans_type|revenue
--------------------------------------------------------------
你好,
我有两个具有公共(public)元素(offer_code_used)的表。我需要做的第一件事是查找 12 月份兑换了多少优惠券,我使用以下代码执行此操作(日期格式为带有 yyyymmdd 的 varchar):
select count(offer_code_used)
from coupon
where coupon_start_date >=20161201 and
coupon_end_date <=20161231
然后我想知道有多少独立购物者以及总销售收入。对于独特的购物者,我使用的是:
select count(distinct customer_id)
from customer
收入:
select sum(revenue)
from customer
我最后想知道 2016 年全年每月兑换永不过期优惠券的数量(假设代码是“STACK”),以及其中有多少是由忠诚成员(member)兑换的:
P.Salmon 建议这个查询(我稍微修改了它以便在 postgresql 中使用),但我在内连接行出现语法错误,我似乎无法纠正。我不相信这个解决方案是正确的,但是我特别需要的是两列;一列包含给定月份内兑换优惠券的数量,另一列包含该月内使用优惠券的忠诚成员(member)的数量。但这绝对为解决这个问题指明了正确的方向
select T.offer_code_used,
concat(substring(T.trans_date,1,4),substring(T.trans_date,5,2)) yyyymm,
SUM(CASE WHEN C.LOYALTY_MEMBER = 'n' then 1 else 0 end) 'notloyal',
SUM(CASE WHEN C.LOYALTY_MEMBER = 'y' then 1 else 0 end) 'loyal',
count(*) as Total
from transaction T
where T.offer_code_used = 'STACK'
INNER JOIN customer C
ON (T.customer_id = C.customer_id)
group by T.offer_code_used, concat(substring(t.trans_date,1,4),substring(t.trans_date,5,2)) yyyymm
with rollup
这就是我遇到了一点麻烦的地方,这不应该起作用,而且我不知道如何检查其中有多少是由忠诚成员(member)兑换的。我知道 customer_id 涉及联接,但我似乎想不出一种方法来实现它。
感谢任何帮助
最佳答案
所提出的解决方案的唯一问题是您的 JOIN 的位置,从概念上讲,它是正确的。下一个查询纠正了这个错误:
SELECT
t.offer_code_used,
substring(t.trans_date,1,6) AS yyyymm,
SUM(CASE WHEN C.LOYALTY_MEMBER = 'n' THEN 1 ELSE 0 END) AS notloyal,
SUM(CASE WHEN C.LOYALTY_MEMBER = 'y' THEN 1 ELSE 0 END) AS loyal,
count(*) as total
FROM
trans t /* I've named the table `trans` to avoid using a reserved word */
JOIN customer c ON (c.customer_id = t.customer_id)
WHERE
t.offer_code_used = 'STACK'
GROUP BY
t.offer_code_used,
substring(t.trans_date,1,6)
您可以在 SQLFiddle 上查看。您得到的答案是:
| offer_code_used | yyyymm | notloyal | loyal | total |
|-----------------|--------|----------|-------|-------|
| STACK | 201612 | 0 | 1 | 1 |
| STACK | 201701 | 1 | 1 | 2 |
<小时/>
完整定义:
CREATE TABLE customer
(
customer_id INTEGER NOT NULL PRIMARY KEY,
household_id INTEGER,
loyalty_member CHARACTER(1) NOT NULL DEFAULT 'n' /* ('n'|'y') representing a boolean */,
gender character(1) /* M | F */,
city character varying(100),
state character(2),
zip character(10),
phone_opt_in INTEGER DEFAULT 0,
email_opt_in INTEGER DEFAULT 0,
mail_opt_in INTEGER DEFAULT 0,
CHECK (loyalty_member in ('y', 'n'))
) ;
INSERT INTO
customer
(customer_id, household_id, loyalty_member)
VALUES
(1, 1, 'y'),
(2, 1, 'n'),
(3, 1, 'y') ;
CREATE TABLE coupon
(
offer_code_user INTEGER NOT NULL,
offer_code_used CHARACTER(10) NOT NULL PRIMARY KEY,
offer_desc CHARACTER VARYING(100),
channel CHARACTER VARYING(100),
camp_code CHARACTER VARYING(100),
coup_start DATE,
coup_end DATE,
total INTEGER
) ;
INSERT INTO
coupon
(offer_code_user, offer_code_used, offer_desc)
VALUES
(1, 'STACK', 'Stack offer'),
(1, 'PROMO1', 'Promo offer') ;
CREATE TABLE trans
(
customer_id INTEGER NOT NULL REFERENCES customer(customer_id),
trans_id INTEGER NOT NULL PRIMARY KEY,
offer_code_used CHARACTER(10) NOT NULL REFERENCES coupon(offer_code_used),
trans_date CHARACTER(10) /* 'yyyymmdd' should actually be a DATE */,
trans_type CHARACTER VARYING(100),
revenue NUMERIC
) ;
INSERT INTO
trans
(customer_id, trans_id, offer_code_used, trans_date)
VALUES
(1, 1, 'STACK', '20170101'),
(2, 2, 'STACK', '20170101'),
(3, 3, 'STACK', '20161230') ;
关于mysql - sql查询从另一个表的输入中提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41907420/
我有三张 table 。表 A 有选项名称(即颜色、尺寸)。表 B 有选项值名称(即蓝色、红色、黑色等)。表C通过将选项名称id和选项名称值id放在一起来建立关系。 我的查询需要显示值和选项的名称,而
在mysql中,如何计算一行中的非空单元格?我只想计算某些列之间的单元格,比如第 3-10 列之间的单元格。不是所有的列...同样,仅在该行中。 最佳答案 如果你想这样做,只能在 sql 中使用名称而
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
我正在为版本7.6进行Elasticsearch查询 我的查询是这样的: { "query": { "bool": { "should": [ {
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 7 年前。 Improve this ques
是否可以编写一个查询来检查任一子查询(而不是一个子查询)是否正确? SELECT * FROM employees e WHERE NOT EXISTS (
我找到了很多关于我的问题的答案,但问题没有解决 我有表格,有数据,例如: Data 1 Data 2 Data 3
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
以下查询返回错误: 查询: SELECT Id, FirstName, LastName, OwnerId, PersonEmail FROM Account WHERE lower(PersonEm
我从 EditText 中获取了 String 值。以及提交查询的按钮。 String sql=editQuery.getText().toString();// SELECT * FROM empl
我有一个或多或少有效的查询(关于结果),但处理大约需要 45 秒。这对于在 GUI 中呈现数据来说肯定太长了。 所以我的需求是找到一个更快/更高效的查询(几毫秒左右会很好)我的数据表大约有 3000
这是我第一次使用 Stack Overflow,所以我希望我以正确的方式提出这个问题。 我有 2 个 SQL 查询,我正在尝试比较和识别缺失值,尽管我无法将 NULL 字段添加到第二个查询中以识别缺失
什么是动态 SQL 查询?何时需要使用动态 SQL 查询?我使用的是 SQL Server 2005。 最佳答案 这里有几篇文章: Introduction to Dynamic SQL Dynami
include "mysql.php"; $query= "SELECT ID,name,displayname,established,summary,searchlink,im
我有一个查询要“转换”为 mysql。这是查询: select top 5 * from (select id, firstName, lastName, sum(fileSize) as To
通过我的研究,我发现至少从 EF 4.1 开始,EF 查询上的 .ToString() 方法将返回要运行的 SQL。事实上,这对我来说非常有用,使用 Entity Framework 5 和 6。 但
我在构造查询来执行以下操作时遇到问题: 按activity_type_id过滤联系人,仅显示最近事件具有所需activity_type_id或为NULL(无事件)的联系人 表格结构如下: 一个联系人可
如何让我输入数据库的信息在输入数据 5 分钟后自行更新? 假设我有一张 table : +--+--+-----+ |id|ip|count| +--+--+-----+ |
我正在尝试搜索正好是 4 位数字的 ID,我知道我需要使用 LENGTH() 字符串函数,但找不到如何使用它的示例。我正在尝试以下(和其他变体)但它们不起作用。 SELECT max(car_id)
我有一个在 mysql 上运行良好的 sql 查询(查询 + 连接): select sum(pa.price) from user u , purchase pu , pack pa where (
我是一名优秀的程序员,十分优秀!