我正在使用group by for like statement,因为我有这样的数据库结构。
我想得到workzone groupby的计数。但是如果我尝试分组,那么输出会出现错误输出,因为输出将按99和99分组,如图所示。
我的sql代码是:
select count(organization),working_zone from `projects` where `district` = 12 and (`working_zone` = 99 or `working_zone` LIKE "99," or `working_zone` LIKE ",99") group by `organization`;
我想要的结果是:
(99),(,99),(99,)应按总和进行分组,结果应为6.
答案 0 :(得分:1)
你有一个糟糕的数据结构 - 虽然我不会感到惊讶,如果数据是好的,你真的在处理一个(合理的)查询的结果。您不应该将原始数据存储在逗号分隔的列表中。相反,请使用联结表。
为什么每对都有一个单独的行SQLish存储数据的方式?考虑以下原因:
但是,有时候,你会遇到别人糟糕的设计决定。如果是这样,一个解决方案使用工作区表:
SELECT prod.prod_id, prod.name, prod.price, MAX( prodlist.date_created)
FROM t_products_lists prodlist
INNER JOIN t_products prod ON prodlist.prod_id = prod.prod_id
WHERE prodlist.date_created < CONVERT(DATETIME,'01.01.2016 23:59:59.997',0)
GROUP BY prod.prod_id, prod.name, prod.price
答案 1 :(得分:1)
SELECT COUNT(organization),working_zone FROM table WHERE working_zone HAVING '99'
UNION ALL
SELECT COUNT(organization),SUBSTRING(working_zone,4) FROM table WHERE working_zone = '99,100'