Else未在mysql查询中运行
我有以下疑问。在这方面,我有是和否的情况。 是,正在访问,但其他部分不工作。请看看这个Else未在mysql查询中运行,mysql,sql,database,Mysql,Sql,Database,我有以下疑问。在这方面,我有是和否的情况。 是,正在访问,但其他部分不工作。请看看这个 SELECT SalesChannel.name , count(Transaction.category_id) as count, (case when (Transaction.no_of_units > 0 and Transaction.mop > 0) THEN 'yes' ELSE 'No' END) AS Is_Present from outlets Outlet inner j
SELECT SalesChannel.name , count(Transaction.category_id) as count, (case when (Transaction.no_of_units > 0 and Transaction.mop > 0) THEN 'yes' ELSE 'No' END) AS Is_Present from outlets Outlet inner join transactions Transaction on Outlet.id = Transaction.outlet_id inner join sale_channels SalesChannel on SalesChannel.id = Outlet.sale_channel_id group by SalesChannel.name
输出应如下所示
KU Electrical
Yes 6 2
No 1 2
6是KU的计数器,Yes表示存在,类似地,No表示不存在KU
select SalesChannel.name ,
Transaction.category_id,
count(Transaction.category_id) as count,
from outlets Outlet inner join transactions Transaction on Outlet.id = Transaction.outlet_id inner join sale_channels SalesChannel on SalesChannel.id = Outlet.sale_channel_id group by SalesChannel.name
下面是我用过的三张表
1.交易
2.出口
3.销售陈纳德
如果不存在“销售渠道”,则创建表(
`id`int(11)不为空,
`name`varchar(255)不为空,
`_active`tinyint(1)不为空,
`已创建`日期时间不为空,
`修改的`日期时间不为空
)ENGINE=InnoDB AUTO_INCREMENT=3默认字符集=1;
--
--表`销售渠道'的倾销数据`
--
插入“销售渠道”('id'、'name'、'is'u active'、'created'、'modified')值
(1,'KU',1,'2016-10-03 00:00:00','2016-10-03 00:00:00'),
(2,“电气”,1,“2016-10-04 00:00:00”,“2016-10-04 00:00:00”);
您正在聚合数据,以便每个SalesChannel.name获得一行数据。SalesChannel.name中可能有一些交易记录的结果为“是”,而另一些记录的结果为“否”,那么“存在”应该是什么呢
查询的另一个问题是销售渠道位于表中。目前有两个,但有时可能有三个、四个或数千个。SQL查询不会生成列数可变的结果。这些列必须事先知道。因此,可能的结果如下所示:
Name Yes No
KU 6 1
Electrical 2 2
姓名是否
KU 6 1
电气2 2
因为你知道你只想要是或否,不管有多少频道
查询:
select
sc.name,
count(case when t.no_of_units > 0 and t.mop > 0 then 1 end) as yes,
count(case when t.no_of_units <= 0 or t.mop <= 0 then 1 end) as no
from sale_channels sc
join outlet o on o.sale_channel_id = sc.id
join transactions t on t.outlet_id = o.id;
选择
理学士姓名,
计数(当单位的t.no\u>0且t.mop>0,则1结束时的情况)为是,
计数(当t.no_of_units时,表中没有与else条件匹配的数据。您的条件是两个字段的表值中不匹配的“Transaction.no_of_>0和Transaction.mop>0”大于0
否则,else条件可以正常工作。实际上应该按事务进行分组。category\u id。但是当我使用category\u id分组时,只有一行出现。请帮助我。我需要问题部分中给出的所需输出。salechannels是多个动态的。您请求的结果显示通道名称和是/否的网格。什么类别是否与此有关?好的计数(Transaction.category\u id)作为计数显示我进入特定类别的次数。是将显示Transaction.no\u of_units>0和Transaction.mop>0,如果我不明白。您已经显示了要查看的结果。您的结果中没有类别,那又如何“特定类别"你说的是什么?如果你想要一个特定的类别,请使用where子句。如果你想要的不是每个频道的结果,而是每个类别的结果,请按类别分组,并显示此结果而不是频道。如果你想要两者,请在你的选择列表和分组方式中同时显示。请让它的其他部分工作。这不起作用。我很乐意为你的努力打分请注意,您在查询方面非常专业和有经验。请整理一下。
CREATE TABLE IF NOT EXISTS `sale_channels` (
`id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`is_active` tinyint(1) NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
--
-- Dumping data for table `sale_channels`
--
INSERT INTO `sale_channels` (`id`, `name`, `is_active`, `created`, `modified`) VALUES
(1, 'KU', 1, '2016-10-03 00:00:00', '2016-10-03 00:00:00'),
(2, 'Electricals', 1, '2016-10-04 00:00:00', '2016-10-04 00:00:00');
Name Yes No
KU 6 1
Electrical 2 2
select
sc.name,
count(case when t.no_of_units > 0 and t.mop > 0 then 1 end) as yes,
count(case when t.no_of_units <= 0 or t.mop <= 0 then 1 end) as no
from sale_channels sc
join outlet o on o.sale_channel_id = sc.id
join transactions t on t.outlet_id = o.id;