如何解决SQL查询,一对多,每个匹配项的计数
我正在使用sql中的自定义数据库在wordpress(PHP)上编写自定义查询。
我有两个表:
| table.carMake | | table.carmodels |
|----------------| |---------------------------------|
| id | make | | ID | makeId| modelname| price |
|----|-----------| |----|-------|----------|---------|
| 1 | toyota | | 1 | 1 | A | low |
| 2 | mazda | | 2 | 3 | B | med |
| 3 | tesla | | 3 | 3 | C | high |
| 4 | 2 | D | med |
| 5 | 2 | E | med |
| 6 | 2 | F | low |
$modelprices =
[
make: toyota,low: 1,medium: 0,high: 0,],[
make: mazda,medium: 2,[
make: tesla,low: 0,medium: 1,high: 1,]
我一直在搜寻,但是我的sql知识非常有限。谢谢!
解决方法
希望这会对您有所帮助,我已经使用DB Fiddle准备了SQL查询。在这里,我使用CASE时要加上制造商和价格明智的数量。
SELECT CM.make,SUM(CASE CMS.price WHEN 'LOW' THEN 1 ELSE 0 END) AS LOW,SUM(CASE CMS.price WHEN 'HIGH' THEN 1 ELSE 0 END) AS HIGH,SUM(CASE CMS.price WHEN 'MED' THEN 1 ELSE 0 END) AS MED
FROM
carMake AS CM
INNER JOIN carmodels AS CMS ON CMS.makeId = CM.id
GROUP BY CM.make;
DB Fiddle链接:https://dbfiddle.uk/?rdbms=mysql_5.7&fiddle=dfb7344abd06a6a7130e1f4eef293476。 这包括创建表和查询。
,此sql查询应返回3列:
- 命名(例如:Toyota)
- 价格(例如:低)
- 组合的“计数”,如果存在,则为“ em” (例如:低价丰田的数量,在这种情况下为1)
from table.carMake cmk join table.carmodels cmd on (cmk.id = cmd.makeId)
group by cmk.make,cmd.price;
我还没有测试过,所以请告诉我它是否不起作用,我会予以纠正。
祝你好运!:)
,尝试以下操作:
选择'make:'+ c.make,
当cm.price ='低'
然后“低:” +计数(厘米价格),否则“低:” +“ 0”结束,
当cm.price ='medium'
然后“中:” +计数(厘米价格)
否则'medium:'+'0'结束,
cm.price ='high'的情况
然后是“高:” +计数(厘米价格)
否则'high:'+'0'结束
来自table.carMake c
内部连接table.carmodels cms.cms = cms.makeid上的cms
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。