Mysql 数多列
我有这张桌子:Mysql 数多列,mysql,sql,Mysql,Sql,我有这张桌子: Teams: ID | Size1 | Size2 | Size3 | Size4 | ... (other columns).. ---------------------------------------- 1 | L | XL | L | M | ... ---------------------------------------- 2 | S | L | S | XXL | ... ------------
Teams:
ID | Size1 | Size2 | Size3 | Size4 | ... (other columns)..
----------------------------------------
1 | L | XL | L | M | ...
----------------------------------------
2 | S | L | S | XXL | ...
----------------------------------------
3 | M | XXL | L | M | ...
----------------------------------------
4 | L | XL | XS | XXL | ...
计算表中所有L的最有效和最简单的MySQL查询是什么
我希望结果中只有一个字段,它是所有列中所有L的计数
编辑:
为了进一步澄清,在我的表格中,第一列有152个L,第二列有2个,第三列有151个,第四列有3个,我预计结果是308个,假设每行只能有一个“L”: 或规范化解决方案,该解决方案支持每行多个'l:
select count(*)
from (
select size1 as size
from YourTable
union all
select size2
from YourTable
union all
select size3
from YourTable
union all
...
)
where size = 'L'
您的WHERE条件将非常大,但您可以使用以下方法:
选择countSize1+countsize2作为总计,其中size1='L'或size2='L'
此解决方案将根据单个列的比较来计算所有列和总计。您可以使用SUM和CASE来完成此操作:
SELECT
sum(case when Size1 = 'L' then 1 else 0 end) +
sum(case when Size2 = 'L' then 1 else 0 end) +
sum(case when Size3 = 'L' then 1 else 0 end) +
sum(case when Size4 = 'L' then 1 else 0 end)
FROM Teams;
或者,您可以使用IF代替CASE:
这其实是一样的
编辑
根据Andromar的评论,还有更简单的解决方案:
SELECT
sum(Size1 = 'L') +
sum(Size2 = 'L') +
sum(Size3 = 'L') +
sum(Size4 = 'L')
FROM Teams;
这是正确的,因为在MySQL中true等于1。我刚刚证实了这一点-
第二版
简化此操作的下一步-仅使用一个总和:
请尝试以下查询:
SELECT sum(
IF(Size1='L', 1, 0) +
IF(Size2='L', 1, 0) +
IF(Size3='L', 1, 0) +
IF(Size4='L', 1, 0)
) as total FROM Teams
从Size1='L'所在的团队中选择SELECT COUNT*,从Size2='L'所在的团队中选择COUNT*,从Size3='L'所在的团队中选择COUNT*,从Size4='L'所在的团队中选择COUNT*;考虑将大小字段归一化到自己的表中,然后只需对其进行单计数,如果另一个大小,则不必更改表。否则,Alexander的答案是正确的。@Buksy现在你需要检查所有关于性能的查询,并给出最终答案。顺便说一句,如果这张表显示了每种尺寸的衣服的可用性,那么这种结构不是最好的。你能像这样在列中做值吗?这对我来说是个新闻me@Askanison4:b,c,d中的a只是a=b或a=c或a=d@dragoste:正确。我认为同一个产品有两种称为L的尺寸是没有意义的,示例数据也同意这一点。@Andomar我们不是来决定在作者的任务中什么是有意义的。在提供的示例数据的第一行中有两个L。第一个查询对我来说不起作用,请从表中选择count*,其中size1、size2、size3、size4中的“L”返回152,而第一列中有152个L,第二列中有2个,第三列中有151个,第四列中有3个。因为在MySQL中,true为1,较短的版本为sumsize='L'。例如。括号中有拼写错误 在第二个查询中,我无法编辑它:即使只有一行,也应该计算两次行数L@Andomar是的,这是他的预期结果。
SELECT
sum(Size1 = 'L') +
sum(Size2 = 'L') +
sum(Size3 = 'L') +
sum(Size4 = 'L')
FROM Teams;
SELECT sum(
(Size1 = 'L') +
(Size2 = 'L') +
(Size3 = 'L') +
(Size4 = 'L') )
FROM Teams;
SELECT sum(
IF(Size1='L', 1, 0) +
IF(Size2='L', 1, 0) +
IF(Size3='L', 1, 0) +
IF(Size4='L', 1, 0)
) as total FROM Teams