我无法从查询中获取结果。 我想获取交易中单位销售的总和和总数,其中交易是特定的邮政编码。
以下是我的表格:
TABLE unit_type(
id (Primary key)
unit_name (varchar)
department_id (Foreign key)
)
TABLE transaction(
id (PK)
commission_fix_out (int)
transaction_end_week (int)
property_id (FK)
unit_type_id (FK)
...
)
TABLE property(
id (PK)
property_zip_id (FK)
...
)
我的 unit_types 表格包含以下记录:
+-----+----------------------+----------------+
| id | unit_name | department_id |
+-----+----------------------+----------------+
| 1 | WV construction | 1 |
| 2 | WV resale | 1 |
| 3 | WV rent | 1 |
| 4 | BV industrial sale | 2 |
| 5 | BV industrial rent | 2 |
| ... | ... | ... |
+-----+----------------------+----------------+
以下是我的查询结果:
SELECT SUM(commission_fix_out), COUNT(commission_fix_out), unit_name, ut.id
FROM unit_type as ut
LEFT JOIN transaction as t
ON ut.id = t.unit_type_id
RIGHT JOIN property as p
ON (p.id = t.property_id AND p.property_zip_id = 1459)
WHERE ut.department_id = 1
GROUP BY unit_name
ORDER BY ut.id
导致:
+------------+-------------+-------------+---------+
| SUM(...) | COUNT(..) | unit_name | ut.id |
+------------+-------------+-------------+---------+
| 40014 | 11 | WV resale | 2 |
| NULL | 0 | WV rent | 3 |
+------------+-------------+-------------+---------+
我期待另一行 WV构建,但它没有显示出来。有谁知道我错在哪一个?
答案 0 :(得分:1)
我设法解决了我的问题。我想和你分享我的结果:
SELECT SUM(commission_fix_out), COUNT(commission_fix_out), unit_name
FROM unit_type ut
LEFT JOIN transaction t
ON (ut.id = t.unit_type_id AND t.property_id IN (SELECT id FROM property p WHERE
property_zip_id = 1459))
WHERE department_id = 1
GROUP BY unit_name
ORDER BY ut.id
我没有使用额外的JOIN,而是尝试在我的ON子句中使用子查询,这给出了我的下一个结果:
+-----------+-----------+-------------------+------+
| SUM(..) | COUNT() | unit_name | id |
+-----------+-----------+-------------------+------+
| NULL | 0 | WV construction | 1 |
| 40014 | 11 | WV resale | 2 |
| NULL | 0 | WV rent | 3 |
+-----------+-----------+-------------------+------+
我要感谢大家帮我解决这个问题。
答案 1 :(得分:0)
我认为这是正确的联接导致问题。
试试这个:
SELECT SUM(commission_fix_out), COUNT(commission_fix_out), unit_name, ut.id
FROM unit_type as ut
LEFT JOIN transaction as t
ON ut.id = t.unit_type_id
WHERE ut.department_id = 1
GROUP BY unit_name
ORDER BY ut.id
结果是什么?
答案 2 :(得分:0)
这可能无法解决问题,但为什么RIGHT JOIN property
?
LEFT JOIN property
会更有意义。
您看,transaction
表已LEFT JOIN
已编入unit_type
,我认为该表是此查询的基表。
答案 3 :(得分:0)
Right Right将有效地撤消LEFT JOIN之前的点
答案 4 :(得分:0)
试试这个:
SELECT SUM(commission_fix_out),
COUNT(commission_fix_out),
unit_name,
ut.id
FROM unit_type as ut
LEFT JOIN `transaction` as t
ON ut.id = t.unit_type_id
LEFT JOIN `property` p
ON p.id = t.property_id
WHERE ut.department_id = 1 AND
p.property_zip_id = 1459
GROUP BY unit_name, p.property_zip_id -- added another column
ORDER BY ut.id
更新1
SELECT *
FROM
(
(
SELECT SUM(commission_fix_out) total_fix_out,
COUNT(commission_fix_out) count_fix_out,
unit_name,
ut.id
FROM unit_type as ut
LEFT JOIN `transaction` as t
ON ut.id = t.unit_type_id
LEFT JOIN `property` p
ON p.id = t.property_id
WHERE ut.department_id = 1 AND
p.property_zip_id = 1459
GROUP BY unit_name, p.property_zip_id -- added another column
ORDER BY ut.id
) tableA
UNION
(
SELECT 0 as total_fix_out,
0 as count_fix_out,
unit_name,
id
FROM unit_type
WHERE id NOT IN
(
SELECT DISTINCT xx.id
FROM unit_type as xx
LEFT JOIN `transaction` as t
ON xx.id = t.unit_type_id
LEFT JOIN `property` p
ON p.id = t.property_id
WHERE xx.department_id = 1 AND
p.property_zip_id = 1459
)
) tableA
) tableC