[英]SQL query, one to many, with count number of each match
我正在使用 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,
low: 1,
medium: 2,
high: 0,
],
[
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 列:
from table.carMake cmk join table.carmodels cmd on (cmk.id = cmd.makeId)
group by cmk.make, cmd.price;
我还没有测试过,所以如果它不起作用,请告诉我,我会纠正它。
祝你好运!:)
请尝试以下操作:
选择“制作:”+ c.make,
cm.price = 'low' 的情况
然后 'low:' + count(cm.price) else 'low:' + '0' 结束,
cm.price = 'medium' 的情况
然后'中等:'+计数(厘米.价格)
否则'中等:'+'0'结束,
cm.price = 'high' 的情况
然后 'high:' + count(cm.price)
否则'高:'+'0'结束
来自 table.carMake c
cm.id = cms.makeid 上的内连接 table.carmodels cms
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.